12
votes

Strange View.Géthitrit () Comportement

J'ai une mise en page simple: xxx pré>

et dans mon activité, je suis imprimé record du bouton après avoir changé son y code> Emplacement: P>

private static void getHitRect(View v, Rect rect) {
    rect.left = (int) com.nineoldandroids.view.ViewHelper.getX(v);
    rect.top = (int) com.nineoldandroids.view.ViewHelper.getY(v);
    rect.right = rect.left + v.getWidth();
    rect.bottom = rect.top + v.getHeight();
}


0 commentaires

3 Réponses :


11
votes

getHitrect () avait un bogue et ne s'appliquerait pas correctement. Nous avons corrigé ce bogue en interne et le correctif sera mis à disposition dans la prochaine version publique d'Android.


4 commentaires

Étant donné que cette réponse a été faite le 19 juillet 2013, je suppose que vous vous référez à Android 4.3 en tant que "prochaine version". Cela signifie-t-il que la méthode, GetHitrect () n'est pas fiable aux versions avant elle?


@Saket, je dirais que c'est une hypothèse juste, car j'ai un téléphone ici qui est coincé sur 4.1.2 (Xperia S) et les coordonnées Y que je reçois ne font pas beaucoup de sens, c'est-à-dire bas et haut - bummer, car cette fonction recordait Je me suis sauvé beaucoup de douleur ...


@Saket Merci pour l'indice, j'ai fini par faire ça :)!


Serait génial si cela pouvait être ajouté à la documentation, car sur le bogue inférieur à 4.3 est toujours présent.



2
votes

Vous pouvez obtenir le recttacle de cette manière:

public Rect getHitRect(View child){
   Rect frame = new Rect();
   frame.left = child.getLeft();
   frame.right = child.getRight();
   frame.top = child.getTop();
   frame.bottom = child.getBottom();
   return frame;
}


1 commentaires

Cela ne fonctionne pas comme enfant.Getleft () renvoie une mauvaise valeur, la solution que le questionneur a écrit à l'aide de WinedroDroid Works



1
votes

Voici une solution qui ne dépend pas de NineoldRroids.

Si vous suivez le chemin du code du chemin de code NINEOLDROIDS Vous êtes finalement ici sur les périphériques d'abeilles post-nids: GitHub P>

private static void getHitRect(View v, Rect rect) {
    rect.left = (int) (v.getLeft() + v.getTranslationX());
    rect.top = (int) (v.getTop() + v.getTranslationY());
    rect.right = rect.left + v.getWidth();
    rect.bottom = rect.top + v.getHeight();
}


1 commentaires

Bonne solution, je dois juste ajouter de petits calibrations rect.top - = Dividervalue / 2; rect.bottom + = dividérale / 2; comme lors de l'utilisation d'un diviseur plus large entre les éléments de ListView, il y avait beaucoup de détections manquées de touches.