2012-09-25 20 views
13

當玩家觸摸屏幕時,我想閱讀。在onTouchEvent中,ACTION_UP不起作用

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

此代碼,是的,它的工作原理,但只有當玩家觸摸屏幕(ACTION_DOWN),但是當他不觸摸屏幕(ACTION_UP),沒有任何反應:/ LogCat

^這是屏幕格式LogCat。你可以看到:這只是ACTION_DOWN,但沒有關於ACTION_UP。 類正在擴大查看:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback { 

你能幫幫我嗎?

編輯:我的遊戲是基於本教程:http://www.droidnova.com/2d-tutorial-series-part-v,848.html

回答

45

我的猜測是,super.onTouchEvent正在恢復false,因爲無論超你打電話不關心關於觸摸事件。

如果返回false到的onTouchEvent,那麼Android操作系統將不再通知你手勢任何進一步的事件。如果要繼續接收觸摸事件信息(例如,ACTION_UP),則必須將true返回到第一個ACTION_DOWN事件。

+0

YES!謝謝! – user1019901

+2

對你的問題得到一個好的,完整的,信息豐富的答案感覺很好。 :)謝謝@Tim! – 2013-04-02 22:14:07

+0

正是我需要的!謝謝! – inteist

0

嘗試:

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

不幸的是,這是行不通的:在這/我的遊戲是基於:http://www.droidnova.com/2d-tutorial-series-part-v,848.html – user1019901

1

「petey」的解決方案爲我工作! 除了一些語法錯誤,在這裏更正:

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

非常感謝。