2010-07-09 3 views
6

J'essaie de mettre en place un zoom avant dans une application que je suis en train de créer et j'ai des problèmes avec l'événement onTouch. Il semble que le pointeur vers le haut & actions vers le bas ne se déclenche pas immédiatement, comme vous n'obtiendrez pas un pointeur vers le haut ou vers le bas jusqu'à ce qu'un mouvement d'action se produise. Donc ce qui arrive si les deux doigts touchent l'écran presque simultanément est que le 2ème doigt (doit être le pointeur (1)) obtient une action de mouvement avant que le pointeur soit appelé, faisant croire que le code est un DRAG et non un zoom pincé. Quelqu'un d'autre a vu ça? En tout cas autour d'elle? Merci.L'événement onTouch ne se déclenche parfois pas ACTION_POINTER_DOWN

Répondre

0

J'ai eu le même problème dans mon projet. Si je touche l'écran et que mes doigts sont trop proches, le système ne réalise pas un événement multitouch. Je pense que c'est parce que lorsque vos doigts sont trop proches, le système le voit comme un seul doigt. Peut-être pouvez-vous vérifier cette hypothèse en utilisant la méthode getSize() pour estimer la zone de l'écran pressée lorsque vous touchez l'écran avec un seul doigt et lorsque vous touchez l'écran avec deux doigts rapprochés.

+0

Merci pour le conseil, qui sera utile, j'en suis sûr. Mais je ne suis pas sûr que ce soit mon problème car il se produit, peu importe où je touche l'écran. En utilisant le débogueur, je peux voir que les événements du pointeur vers le haut et vers le bas semblent toujours être retardés, et se produire après un événement de déplacement (et l'événement de déplacement a toujours juste un seul pointeur dans cette instance). J'ai même essayé l'application "Dotty" et je pouvais y voir le même comportement. Cela pourrait-il être un problème matériel? J'ai un Evo avec une ROM personnalisée. Merci. – JStew

0

Il s'est avéré être un problème avec la ROM personnalisée que j'avais flashé à mon Evo. Merci encore à hara pour leurs conseils car cela s'est avéré être un autre bug que j'avais.

1

face à la même question avéré que ACTION_POINTER_2_DOWN était tiré dans mon application quand je touché le deuxième doigt et après que ACTION_MOVE a été tiré getAction() donne le numéro d'événement qui doit être vérifié contre cette liste

+0

http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE – Omkar

29

Assurez-vous d'inclure MotionEvent.ACTION_MASK dans votre commutateur. Par exemple:

switch(event.getAction() & MotionEvent.ACTION_MASK){ 
case MotionEvent.ACTION_DOWN: 
some code 
break; 
case MotionEvent.ACTION_POINTER_DOWN: 
ETC 
+0

WOW! Cela a effectivement résolu mon problème! Je ne peux pas comprendre pourquoi ... mais bon! Merci: D – Supercelo

+0

Vous da real mvp @tayler! – Sipty

+0

vous avez sauvé ma journée chérie .. beaucoup! –

0

J'ai résolu le même problème avec ceci:

switch(event.getActionMasked()) { 
    case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
    break; 
} 
0

J'ai remarqué que ce (MotionEvent.ACTION_POINTER_DOWN) cas être congédiées si méthode OnTouch (événement) a fait son retour vrai comme indiqué ci-dessous:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch(motionEvent.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
     break ; 
    } 
    return true; 
} 

note: MotionEvent.ACTION_DOWN ne s'écouté si la méthode OnTouch() a r retourné une valeur booléenne comme retour super.onTouchEvent (event); alors assurez-vous que c'est vrai pour éviter cette situation.

Questions connexes