15

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

    @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。可以看到:这只是 ACTION_DOWN,而与 ACTION_UP 无关。类正在扩展视图:

public class MainClass extends SurfaceView implements SurfaceHolder.Callback {

你能帮助我吗?

编辑:我的游戏基于本教程:http ://www.droidnova.com/2d-tutorial-series-part-v,848.html

4

3 回答 3

50

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

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

于 2012-09-25T17:56:15.797 回答
2

尝试 :

int action = event.getAction();
int code = action & MotionEvent.ACTION_MASK;
if (code == MotionEvent.ACTION_POINTER_UP || code == MotionEvent.ACTION_UP || MotionEvent.ACTION_CANCEL) {
于 2012-09-25T17:42:20.487 回答
2

“petey”的解决方案对我有用!除了一些语法错误,在这里更正:

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

非常感谢。

于 2014-12-19T21:47:12.180 回答