2010-11-24 5 views

Répondre

11

Je crois que cela vient du fait que Multi-touch a été ajouté, ACTION_UP a été ajouté depuis le niveau API 1, mais ACTION_POINTER_UP a été ajouté au niveau API 5 lorsque le multi-touch a été ajouté. Le résultat obtenu dépendra de la méthode que vous appelez, getAction() retournera ACTION_UP alors que getActionMasked() donnera ACTION_POINTER_UP mais vous permettra également d'appeler getActionIndex() pour savoir lequel des pointeurs multi-touch a vient d'être élevé. Je pense que c'est ce que tu veux faire.

+0

Pas tout à fait, mais proche. :) – adamp

+5

ACTION_POINTER_UP est utilisé à la place de ACTION_UP quand il y a encore un doigt sur l'écran – Chris

114

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

Android pense é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 totalité de la séquence d'événements d'un seul geste est toujours envoyée à la même vue que celle qui a été sélectionnée lors de l'action ACTION_DOWN initiale, 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 de multitouch ou si vous travaillez avec une ancienne version de la plate-forme, vous pouvez ignorer les événements ACTION_POINTER_ *. ACTION_DOWN est pour le premier doigt qui touche l'écran

  • Cela commence le geste. Les données du pointeur pour ce doigt sont toujours à l'index 0 dans le MotionEvent.
  • ACTION_POINTER_DOWN est pour les doigts supplémentaires qui entrent dans l'écran au-delà de la première. Les données de pointeur pour ce doigt sont à l'index retourné par getActionIndex().
  • ACTION_POINTER_UP est envoyé lorsqu'un doigt quitte l'écran mais au moins un doigt le touche encore. Le dernier exemple de données sur le doigt qui a été créé est à l'index retourné par getActionIndex().
  • ACTION_UP est envoyé lorsque le dernier doigt quitte l'écran. Le dernier échantillon de données sur le doigt qui s'est levé est à l'index 0. Ceci termine le geste. ACTION_CANCEL signifie que le geste entier a été annulé pour une raison quelconque. Ceci termine le geste.
+6

Merci, cette réponse remplit beaucoup de blancs dans les tutoriels et les documents officiels! – johndodo

+0

@adamp Dans mon application, je veux mettre en œuvre le balayage à un doigt et le balayage à double doigt. Mais ce qui se passe est quand je fais le double glissement de doigt 2 actions sont exécutées ie, 1er qui était pour le glissement d'un doigt et le 2ème qui était pour le glissement de 2 doigts. Pourriez-vous vérifier ceci [Question] (http: // stackoverflow. com/questions/34135432/mouvement-événement-single-et-double-doigt-swipe) – Prabs

+0

Cela devrait vraiment être la réponse acceptée. –

Questions connexes