Java Android-未检测到操作启动

Java Android-未检测到操作启动,java,android,Java,Android,在下面的代码中,当我将手指移离联系人时,我无法理解为什么没有触发ACTION_UP事件 public boolean onTouch(View v, MotionEvent event) { switch(event.getActionIndex()){ case MotionEvent.ACTION_UP: Utils.log("Touch Up"); break; case MotionEvent

在下面的代码中,当我将手指移离联系人时,我无法理解为什么没有触发ACTION_UP事件

public boolean onTouch(View v, MotionEvent event) {
        switch(event.getActionIndex()){
        case MotionEvent.ACTION_UP:
            Utils.log("Touch Up");
            break;
        case MotionEvent.ACTION_DOWN:
            Utils.log("Touch Down");
            break;
        }
        return true;
    }

用我的代码替换你的代码

public boolean onTouch(View v, MotionEvent event) {
          //Here's the problem            
       switch(event.getAction()){
        case MotionEvent.ACTION_UP:
            Utils.log("Touch Up");
            break;
        case MotionEvent.ACTION_DOWN:
            Utils.log("Touch Down");
            break;
        }
        return true;
    }

用我的代码替换你的代码

public boolean onTouch(View v, MotionEvent event) {
          //Here's the problem            
       switch(event.getAction()){
        case MotionEvent.ACTION_UP:
            Utils.log("Touch Up");
            break;
        case MotionEvent.ACTION_DOWN:
            Utils.log("Touch Down");
            break;
        }
        return true;
    }
你应该使用

  • getAction()
    返回单指针事件(以及不推荐的多指针事件…)
  • getActionMasked()
    返回单个和多个指针事件(与
    getActionIndex()
    一起使用以确定哪个指针)
  • getActionIndex()
    只返回指针索引
因此
getActionIndex()
返回哪个手指执行了向下/向上操作(0、1、2等),而
getAction()
getActionMasked()
返回您想要的单指针事件(
action\u down
action\u up
等)。

您应该使用

  • getAction()
    返回单指针事件(以及不推荐的多指针事件…)
  • getActionMasked()
    返回单个和多个指针事件(与
    getActionIndex()
    一起使用以确定哪个指针)
  • getActionIndex()
    只返回指针索引

因此
getActionIndex()
返回哪个手指执行了向下/向上操作(0、1、2等),而
getAction()
getActionMasked()
返回您想要的单指针事件(
action\u down
action\u up
等)。

对于其他有类似问题的手指,行动没有被触发的原因之一可能是行动过于敏感。在这种情况下,ACTION\u UP永远不会被触发,因为系统将触摸动作解释为ACTION\u MOVE并触发它

一个解决方案是,如果x和y偏移量足够大,可以将其作为动作移动处理,则检查何时发生动作移动,否则,可以将其作为动作向上威胁。

对于其他有类似问题的人来说,不启动ACTION\u UP的原因之一可能是ACTION\u MOVE过于敏感。在这种情况下,ACTION\u UP永远不会被触发,因为系统将触摸动作解释为ACTION\u MOVE并触发它

一个解决方案是,如果x和y偏移量足够大,可以将其作为动作移动处理,则检查何时发生动作移动,否则,可以将其作为动作向上威胁。

开关(event.getAction())
开关(event.getAction())