gpt4 book ai didi

android - onInterceptTouchEvent 从不接收 action_move

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:50:21 26 4
gpt4 key购买 nike

我有一个覆盖了 onInterceptTouchEvent() 的自定义 ViewGroup。它收到 ACTION_DOWN 但从未收到 ACTION_MOVE。据我了解,除非它返回“true”,否则它应该接收所有 MotionEvents。

ViewGroup 包含两个 View ,一个 ImageView 和一个 GridLayout。

我的拦截代码是:

  @Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
logD ("DDV Intercept DOWN");
break;
case MotionEvent.ACTION_POINTER_DOWN:
logD ("DDV Intercept P DOWN"); // logD: shell around Log.d()
break;
case MotionEvent.ACTION_MOVE:
logD ("DDV Intercept MOVE");
break;
case MotionEvent.ACTION_UP:
logD ("DDV Intercept UP");
break;
case MotionEvent.ACTION_POINTER_UP:
logD ("DDV Intercept P UP " + ev.getActionIndex());
break;
case MotionEvent.ACTION_CANCEL:
logD ("DDV Intercept CANCEL");
break;
default:
logD ("DDV Intercept " + (action & MotionEvent.ACTION_MASK));
}
return false;
}

除了 ACTION_MOVE 中的一种情况外,我还有返回 false 的 onTouch 代码;但是,它仅在调用 ACTION_DOWN 时调用;因此它只返回 false。

最佳答案

比这要复杂一点。首先,您需要覆盖 onTouchEvent() 并在那里处理 ACTION_DOWNMOVE 事件。然后会发生以下情况。

  1. ACTION_DOWN 事件首先被分派(dispatch)到 onInterceptTouchEvent()。您应该从那里返回 false
  2. 现在有两种情况:
    • 如果在 View 树中 ACTION_DONW 事件的位置下没有可触摸 View ,则 ACTION_DOWN 事件和所有后续事件将被分派(dispatch)到 onTouchEvent()。您必须从那里返回 true。只有这样,您才会收到发送到 onTouchEvent() 方法的后续事件。无论您返回 true 还是 falseonInterceptTouchEvent() 都不会再收到任何后续事件。
    • 如果有一个可触摸 View ,那么所有事件都将被分派(dispatch)到onInterceptTouchEvent()(包括ACTION_MOVE 事件)。在检测到您的手势后,您需要从那里返回 true。从此处返回 true 后,可触摸 View 将收到 ACTION_CANCEL 事件,所有其他事件都将分派(dispatch)给 onTouchEvent() 方法。

希望这对您有所帮助。

关于android - onInterceptTouchEvent 从不接收 action_move,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23725102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com