1

我无法弄清楚为什么当我将手指从以下代码中移开时没有触发 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;
    }
4

3 回答 3

3

你应该使用getActionMasked().

  • getAction()返回指针事件(和不推荐使用的多指针事件......)
  • getActionMasked()返回单个多个指针事件(使用 withgetActionIndex()来确定哪个指针),
  • getActionIndex()只返回指针索引。

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

于 2012-12-25T05:05:10.993 回答
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;
    }
于 2012-12-25T04:59:47.737 回答
0

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

一个解决方案是检查 ACTION_MOVE 何时发生,如果 x 和 y 偏移量大到足以将其作为 ACTION_MOVE 处理,否则,您可以将其作为 ACTION_UP 进行威胁。 这是SO示例。

于 2019-01-08T19:55:17.780 回答