2012-07-05 15 views
6

La documentación dice esto acerca de que:Android - Cómo manejar dos toque de un dedo

Un gesto comienza con un evento de movimiento con ACTION_DOWN que proporciona la ubicación de la primera puntero hacia abajo. Como cada puntero adicional que baja o sube, el marco generará un evento de movimiento con ACTION_POINTER_DOWN o ACTION_POINTER_UP en consecuencia.

así que he hecho la anulación de la función onTouchEvent en mi actividad:

@Override 
public boolean onTouchEvent(MotionEvent MEvent) 
{ 

    motionaction = MEvent.getAction(); 

    if(motionaction == MotionEvent.ACTION_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER1 " + MEvent.getActionIndex()); 
    } 

    if(motionaction == MotionEvent.ACTION_POINTER_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER2 " + MEvent.getActionIndex()); 
    } 

} 

Por desgracia, el segundo si no se introduce. La actividad contiene 2 vistas con 2 OnTouchListener, sé que onTouchEvent se invoca solo si la vista de la actividad no consume el evento, así que traté de devolver false en el oyente y de esa manera puedo reconocer solo el toque con el primer dedo pero esto evita que el oyente reciba el evento ACTION_UP y no me permite reconocer el toque del segundo dedo. También traté de volver verdadero en el oyente pero después de invocar manualmente la función onTouchEvent pero esto me permite reconocer solo el primer toque del dedo también.

¿Qué hay de malo en mi código?

Respuesta

15

creo que el código no se encuentra la operación de enmascaramiento como:

switch (motionaction & MotionEvent.ACTION_MASK) { 
case MotionEvent.ACTION_POINTER_DOWN: 
} 

Este código debe ser capaz de comprobar si hay ACTION_POINTER_DOWN.

Buena suerte & dinos qué sucede.

Tommy Kwee

+0

Sí, este es el problema. Agregar el 'y' con ACTION_MASK resolvió el problema. Lo que me molesta es que en la documentación oficial no diga nada al respecto. – Bemipefe

+0

Bernipefe, lo siento por usted, señor. Cualquiera puede cometer un error en una documentación. Este es probablemente un error común porque a veces no es necesario enmascarar. Mi única sugerencia para la próxima vez es usar el depurador para ver qué valores son entrantes, y ver si alguno de los valores es lo que esperaba. Buena suerte a otro fan de Android! –

+0

Puedo tomar ACTION_POINTER_UP y ACTION_POINTER_DOWN pero no puedo encontrar cómo tomar ACTION_MOVE. Puedo capturarlo en el modo de un solo dedo en el oyente de la vista, pero cuando coloco el segundo dedo en la pantalla, lo único que puedo obtener del método onTouchEvent es la acción ARRIBA y ABAJO y no la acción MOVER. ¿Cómo puede arreglarlo? – Bemipefe

Cuestiones relacionadas