Android - 未检测到ACTION_UP

时间:2012-12-25 04:47:16

标签: 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_DOWN:
            Utils.log("Touch Down");
            break;
        }
        return true;
    }

3 个答案:

答案 0 :(得分:3)

您应该使用getActionMasked()

  • getAction()返回单个指针事件(并弃用了多个指针事件......)
  • getActionMasked()返回单个多个指针事件(与getActionIndex()一起使用以确定哪个指针),
  • getActionIndex()仅返回指针索引。

所以getActionIndex()会返回哪个手指执行了向下/向上操作(0,1,2等),而getAction()getActionMasked()会返回单个您想要的指针事件(ACTION_DOWNACTION_UP等)

答案 1 :(得分:2)

用我的代码替换你的代码。

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

答案 2 :(得分:0)

对于其他有类似问题的人,未触发ACTION_UP的原因之一可能是过于敏感的ACTION_MOVE。在这种情况下,永远不会触发ACTION_UP,因为系统会将触摸动作解释为ACTION_MOVE并触发它。

一种解决方案是检查x和y偏移量是否足够大以将其作为ACTION_MOVE处理,以检查ACTION_MOVE何时发生,否则,您可以将其作为ACTION_UP进行威胁。 Here is SO example.