Android 区分点击和拖动 dispatchTouchEvent

3

我目前正在使用 dispatchTouchEvent 来获取触摸事件,有没有一种简单的方法来区分点击和“拖动”手势?

2个回答

1

DispatchTouchEvent被调用时会带有一个MotionEvent参数。在MotionEvent中,方法getAction可以返回以下值:

  • ACTION_DOWN
  • ACTION_MOVE
  • ACTION_UP
  • ACTION_CANCEL

如果是ACTION_DOWN标志,则设置isClick。如果有ACTION_MOVE,则清除isClick标志。

switch (ev.getAction()) {
    case MotionEvent.ACTION_DOWN:
        isClick = true;
        break;
    case MotionEvent.ACTION_CANCEL:
    case MotionEvent.ACTION_UP:
        if (isClick) {
            //TODO Click action
        }
        break;
    case MotionEvent.ACTION_MOVE:
        isClick = false;
        break;
    default:
        break;
    }
    return true;
}

2
似乎无论我轻触多么短暂,动作移动事件总是会被触发。 - JeffRegan
请查看我的另一个答案,该答案在将isClick设置为false之前引入了移动阈值:https://dev59.com/1W855IYBdhLWcg3weEKJ#16485989 - MSquare
我昨天实现了一个类似的解决方案。你可能想要更新这个答案。 - JeffRegan
这种方法不可靠,因为手指的微小抖动会触发ACTION_MOVE,从而使您的点击操作无效。 - user2968401
@user2968401:没错!你可以实现移动阈值: https://dev59.com/1W855IYBdhLWcg3weEKJ#16485989 - MSquare

0

设置阈值限制。当您将指针移动到小范围内时,使其被识别为单击,否则为移动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接