gpt4 book ai didi

Android GestureDetector 无法使用 FrameLayout 检测到 onScroll 事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:39 25 4
gpt4 key购买 nike

我有一个扩展 FrameLayout 的 View ,需要通知它上面的滚动事件。此 View 有一个实现 GestureDetector 的类的实例,该实例由覆盖的 onInterceptTouchEvent 方法调用。

    private class HorizontalScrollListener implements OnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
...
return false;
}
@Override
public boolean onDown(MotionEvent e) {
...
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
...
System.out.println();
}
@Override
public void onShowPress(MotionEvent e) {}
@Override
public boolean onSingleTapUp(MotionEvent e) { return false; }
}

唯一的问题是当我尝试滚动时可以调用 onDown 和 onLongPress 方法,但实际的 onScroll 方法永远不会被调用。

    @Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = super.onInterceptTouchEvent(event);

if (gestureDetector.onTouchEvent(event)) {
return result;
} else {
return false;
}
}

最佳答案

onInterceptTouchEvent 一旦返回 true 就不会再为运动序列调用。事件随后直接发送到 onTouchEvent(因为它们现在正从 child 那里被拦截)。<​​/p>

这里需要做两处改动:

  • OnGestureListener.onDown() 应该返回 true 以便检测器可以处理更复杂的手势,例如滚动
  • onInterceptTouchEvent 应始终返回 false 以保持事件流流向此方法

关于Android GestureDetector 无法使用 FrameLayout 检测到 onScroll 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9230546/

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