2012-09-25 12 views
13

Me gustaría leer cuando un jugador toca la pantalla y cuando no.En onTouchEvent, ACTION_UP no funciona

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if(event.getAction() == MotionEvent.ACTION_UP){ //ACTION UP 
     actionOnUP = true; 
     Log.v("MC", "Up"); 
    } 
    if(event.getAction() == 0){ //ACTION DOWN 
     actionOnUP = false; 
     Log.v("MC", "Down"); 
    } 
    Log.v("MC", event.getAction() + " "); 
    return super.onTouchEvent(event); 
} 

Este código, sí, funciona, pero sólo cuando el jugador toca la pantalla (ACTION_DOWN), pero cuando él no tocar la pantalla (ACTION_UP), no pasa nada:/ LogCat

^Esta es una pantalla de LogCat. Puedes ver: esto es solo ACTION_DOWN, pero nada sobre ACTION_UP. clase está extendiendo Vista:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback { 

¿Me puede ayudar?

EDIT: Mi juego se basa en este tutorial: http://www.droidnova.com/2d-tutorial-series-part-v,848.html

Respuesta

45

Mi conjetura es que super.onTouchEvent está volviendo false, como lo superclase que está llamando no le importa sobre el evento táctil.

Si devuelve false a onTouchEvent, entonces el sistema operativo Android ya no le notificará de ningún otro evento en ese gesto. Si desea continuar recibiendo información de eventos táctiles (ACTION_UP por ejemplo), debe devolver true al primer evento ACTION_DOWN.

+0

¡SÍ! ¡Gracias! – user1019901

+2

Se siente tan bien recibir una respuesta buena, completa e informativa a su problema. :) Gracias @Tim! –

+0

¡Justo lo que necesitaba! ¡Gracias! – inteist

0

intento:

int action = event.getAction(); 
int code = action & MotionEvent.ACTION_MASK; 
if (code == MotionEvent.ACTION_POINTER_UP || code == MotionEvent.ACTION_UP || MotionEvent.ACTION_CANCEL) { 
+0

Lamentablemente, no funciona:/Mi juego se basa en esto: http://www.droidnova.com/2d-tutorial-series-part-v,848.html – user1019901

1

¡La solución de "petey" funcionó para mí! Excepto algunos errores de sintaxis, corregidos aquí:

int code = event.getAction() & MotionEvent.ACTION_MASK; 
if ((code == MotionEvent.ACTION_POINTER_UP) || (code == MotionEvent.ACTION_UP) || (code == MotionEvent.ACTION_CANCEL)) { 

Muchas gracias.