J'ai une mise en page simple: 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();
}
3 Réponses :
getHitrect () code> 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. P>
É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.
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; }
Cela ne fonctionne pas comme enfant.Getleft () renvoie une mauvaise valeur, la solution que le questionneur a écrit à l'aide de WinedroDroid Works
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(); }
Bonne solution, je dois juste ajouter de petits calibrations rect.top - = Dividervalue / 2; rect.bottom + = dividérale / 2; code> 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.