【问题标题】:In onTouchEvent, ACTION_UP doesn't work在 onTouchEvent 中,ACTION_UP 不起作用
【发布时间】:2012-09-17 06:49:09
【问题描述】:

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

    @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

【问题讨论】:

    标签: android touch-event


    【解决方案1】:

    尝试:

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 为您的问题得到一个好的、完整的、信息丰富的答案感觉真好。 :) 谢谢@Tim!
    • 正是我需要的!谢谢!
    【解决方案3】:

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

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

    非常感谢。

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多