2012-09-25 10 views
13

Mi piacerebbe leggere quando un giocatore tocca lo schermo e quando no.In onTouchEvent, ACTION_UP non funziona

@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); 
} 

Questo codice, sì, funziona, ma solo quando il giocatore toccare lo schermo (ACTION_DOWN), ma quando lui non toccare lo schermo (ACTION_UP), non succede nulla:/ LogCat

^Questa è la maschera LogCat. Puoi vedere: questo è solo ACTION_DOWN, ma nulla su ACTION_UP. Classe sta estendendo Vista:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback { 

mi potete aiutare?

EDIT: Il mio gioco si basa su questo tutorial: http://www.droidnova.com/2d-tutorial-series-part-v,848.html

risposta

45

mia ipotesi è che super.onTouchEvent sta tornando false, come qualunque superclasse che si sta chiamando non si cura sull'evento touch.

Se si restituisce false a onTouchEvent, il sistema operativo Android non ti avviserà più di altri eventi in quel gesto. Se si desidera continuare a ricevere informazioni sull'evento di tocco (ad esempio ACTION_UP), è necessario restituire true al primo evento ACTION_DOWN.

+0

SÌ! Grazie! – user1019901

+2

Ci si sente così bene a ottenere una risposta valida, completa e informativa al problema. :) Grazie @Tim! –

+0

Proprio quello di cui avevo bisogno! Grazie! – inteist

0

prova:

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

Sfortunatamente, non funziona:/Il mio gioco si basa su questo: http://www.droidnova.com/2d-tutorial-series-part-v.848.html – user1019901

1

La soluzione "petey" ha funzionato per me! Tranne qualche errori di sintassi, corretti qui:

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

Grazie mille.

Problemi correlati