2010-11-24 9 views

Respuesta

11

Creo que se derivó de la adición de Multi-touch, ACTION_UP ha estado en API desde el nivel 1, pero se agregó ACTION_POINTER_UP en el nivel 5 de API cuando se agregó el toque múltiple.

El resultado que obtenga dependerá del método que esté llamando, getAction() devolverá ACTION_UP mientras que getActionMasked() le daría ACTION_POINTER_UP pero también le permitirá llamar a getActionIndex() para averiguar cuál de los punteros multitáctiles tiene solo ha sido levantado. Creo que esto es lo que quieres hacer.

+0

No del todo, pero cerca. :) – adamp

+5

ACTION_POINTER_UP se usa en lugar de ACTION_UP cuando todavía hay un dedo en la pantalla – Chris

114

Comienza aquí si no lo ha leído ya: http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

Android piensa acerca de los eventos táctiles en términos de gestos. Un gesto en este sentido incluye todos los eventos desde el primer dedo que toca la pantalla hasta el último dedo que sale de la pantalla. La secuencia de eventos completa de un solo gesto siempre se envía a la misma vista que se seleccionó durante la ACTION_DOWN inicial a menos que un padre intercepte la secuencia de eventos por algún motivo. Si un padre intercepta la secuencia de eventos de un niño, el niño obtendrá ACTION_CANCEL.

Si está trabajando con eventos multitouch, siempre use el valor devuelto por getActionMasked() para determinar la acción. Si no necesita multitouch o está trabajando con una versión de plataforma anterior, puede ignorar los eventos ACTION_POINTER_ *.

  • ACTION_DOWN es para el primer dedo que toca la pantalla. Esto comienza el gesto. Los datos del puntero para este dedo siempre están en el índice 0 en MotionEvent.
  • ACTION_POINTER_DOWN es para los dedos adicionales que entran en la pantalla más allá del primero. Los datos del puntero para este dedo están en el índice devuelto por getActionIndex().
  • ACTION_POINTER_UP se envía cuando un dedo sale de la pantalla pero al menos un dedo aún lo está tocando. La última muestra de datos sobre el dedo que subió está en el índice devuelto por getActionIndex().
  • ACTION_UP se envía cuando el último dedo sale de la pantalla. La última muestra de datos sobre el dedo que subió está en el índice 0. Esto finaliza el gesto.
  • ACTION_CANCEL significa que el gesto completo fue abortado por alguna razón. Esto termina el gesto.
+6

¡Gracias, esta respuesta llena muchos de los espacios en blanco en tutoriales y documentos oficiales! – johndodo

+0

@adamp En mi aplicación quiero implementar deslizar un solo dedo y deslizar dos dedos. Pero lo que está sucediendo es que cuando hago el deslizamiento con dos dedos, se realizan 2 acciones, es decir, 1º que fue para 1 dedo deslizar y 2º que fue para 2 dedos deslizar ... ¿Podrías verificar esta [Pregunta] (http: // stackoverflow. com/questions/34135432/motion-event-single-and-double-finger-swipe) – Prabs

+0

Esto realmente debería ser la respuesta aceptada. –

Cuestiones relacionadas