2010-07-09 18 views
6

Estoy tratando de implementar el uso del pellizco-zoom en una aplicación que estoy creando y tengo problemas con el evento onTouch. Parece que las acciones descendentes del & del puntero no se disparan inmediatamente, como que no se moverá un puntero hacia arriba o hacia abajo hasta que se produzca un movimiento de acción. Entonces, ¿qué pasa si ambos dedos presionan la pantalla casi simultáneamente? Es que el 2º dedo (debería ser un puntero (1)) obtiene una acción de movimiento antes de llamar al puntero hacia abajo, haciendo que el código piense que es un ARRASTRE no un zoom pellizco. ¿Alguien más ha visto esto? De todos modos alrededor de eso? Gracias.evento onTouch que a veces no se activa ACTION_POINTER_DOWN

Respuesta

0

Tuve el mismo problema en mi proyecto. Si toco la pantalla y mis dedos están demasiado cerca uno del otro, el sistema no realiza un evento multitáctil. Creo que es porque cuando tus dedos están demasiado cerca el sistema lo ve como un solo dedo.

Quizás pueda verificar esta suposición utilizando el método getSize() para estimar el área de la pantalla que se presiona cuando toca la pantalla con un solo dedo y cuando toca la pantalla con dos dedos cerca del borde.

+0

Gracias por el consejo, eso será útil, estoy seguro. Pero no estoy seguro de que ese sea mi problema, ya que ocurre sin importar dónde toque la pantalla. Utilizando el depurador puedo ver que los eventos de subida y bajada del puntero parecen estar siempre retrasados, y ocurren después de un evento de movimiento (y el evento de movimiento siempre tiene solo un puntero en esa instancia). Incluso probé la aplicación "Dotty" y pude ver el mismo comportamiento en ella. ¿Podría ser un problema de hardware? Tengo una ROM Evo w/custom. Gracias. – JStew

0

Resultó ser un problema con la ROM personalizada que había flasheado en mi Evo. Gracias de nuevo a hara por su consejo ya que resultó ser otro error que tuve.

1

enfrentan el mismo problema resultó que ACTION_POINTER_2_DOWN estaba siendo despedido en mi aplicación cuando toqué el segundo dedo y después de eso ACTION_MOVE fue despedido el método getAction() da el número de evento, que necesita ser comprobada contra esta lista

+0

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

29

asegúrese de incluir MotionEvent.ACTION_MASK en su interruptor. Por ejemplo:

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

¡GUAU! ¡Esto realmente resolvió mi problema! No puedo entender por qué ... pero ¡oye! Gracias: D – Supercelo

+0

Usted da mvp @tayler real! – Sipty

+0

salvaste mi día querido ... ¡mucho! –

0

He resuelto el mismo problema con esto:

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

me he dado cuenta de que este caso (MotionEvent.ACTION_POINTER_DOWN) ser despedido si método onTouch (evento) ha vuelto como verdadera como se indica a continuación:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

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

Nota: MotionEvent.ACTION_DOWN consiguiendo solamente si el método escuchado onTouch() tiene r generó un valor booleano como return super.onTouchEvent (evento); así que asegúrese de ser cierto para evitar esta situación.

Cuestiones relacionadas