在onTouchEvent中,ACTION_UP不起作用

时间:2012-09-25 17:40:24

标签: android ontouchevent

我想在玩家触摸屏幕时阅读,何时不阅读。

    @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

3 个答案:

答案 0 :(得分:48)

我的猜测是super.onTouchEvent正在返回false,因为你所调用的任何超类都不关心触摸事件。

如果您将false返回onTouchEvent,则Android操作系统将不再通知您该手势中的任何其他事件。如果您想继续接收触摸事件信息(例如ACTION_UP),则必须将true返回到第一个ACTION_DOWN事件。

答案 1 :(得分:1)

" petey"的解决方案为我工作! 除了一些语法错误,请在此处更正:

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

非常感谢。

答案 2 :(得分:0)

尝试:

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