web-dev-qa-db-fra.com

android: différence entre ACTION_UP et ACTION_POINTER_UP

à partir du document Android seul, je ne comprends pas vraiment la différence entre ACTION_UP et ACTION_POINTER_UP. http://developer.Android.com/reference/Android/view/MotionEvent.html#ACTION_DOWN

en gros, je veux capturer l'événement quand un doigt est libéré de l'écran (même si un autre peut encore le toucher)

merci!

40
clamp

Je pense que cela provient de l'ajout de la fonction multi-touch, ACTION_UP existe depuis l'API niveau 1, mais ACTION_POINTER_UP a été ajouté dans l'API niveau 5 lors de l'ajout de la fonction multi-touch.

Le résultat que vous obtiendrez dépendra de la méthode que vous appelez, getAction () retournerait ACTION_UP tandis que getActionMasked () donnerait ACTION_POINTER_UP mais vous permettrait également d'appeler getActionIndex () pour savoir lequel des pointeurs multi-touch vient d'être levé. Je pense que c'est ce que vous voulez faire.

12
GeekYouUp

Commencez ici si vous ne l'avez pas déjà lu: http://Android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

Android pense aux événements tactiles en termes de gestes. Un geste dans ce sens inclut tous les événements depuis le premier doigt qui touche l'écran jusqu'au dernier doigt qui quitte l'écran. La séquence d'événements entière d'un seul geste est toujours envoyée à la même vue que celle choisie lors de la première ACTION_DOWN, sauf si un parent intercepte le flux d'événements pour une raison quelconque. Si un parent intercepte le flux d'événements d'un enfant, l'enfant recevra ACTION_CANCEL.

Si vous travaillez avec des événements multitouch, utilisez toujours la valeur renvoyée par getActionMasked () pour déterminer l'action. Si vous n'avez pas besoin du multitouch ou que vous travaillez avec une ancienne version de plate-forme, vous pouvez ignorer les événements ACTION_POINTER_ *.

  • ACTION_DOWN est pour le premier doigt qui touche l'écran. Cela démarre le geste. Les données du pointeur pour ce doigt sont toujours à l'index 0 dans MotionEvent.
  • ACTION_POINTER_DOWN est pour les doigts supplémentaires qui entrent dans l'écran au-delà du premier. Les données du pointeur pour ce doigt sont à l'index retourné par getActionIndex ().
  • ACTION_POINTER_UP est envoyé lorsqu'un doigt quitte l'écran mais qu'au moins un doigt le touche toujours. Le dernier échantillon de données sur le doigt remonté est à l'index renvoyé par getActionIndex ().
  • ACTION_UP est envoyé lorsque le dernier doigt quitte l'écran. Le dernier échantillon de données sur le doigt remonté est à l'index 0. Ceci met fin au geste.
  • ACTION_CANCEL signifie que le geste entier a été abandonné pour une raison quelconque. Cela met fin au geste.
129
adamp