在特定情况下不调用GestureDetectorCompat.onScroll

时间:2018-05-28 13:58:36

标签: android gesture gesturedetector

我有一个好奇的案例,没有调用GestureDetectorCompat.onScroll。我有一个SurfaceView用于显示实现GestureDetector.OnGestureListener的自定义地图,在这个SurfaceView类中我有两个GestureDetectors,一个用于处理正常模式下的手势,另一个用于在编辑地图时处理手势。我有一个变量_activeGestureDetector,我根据用例分配给正确的GestureDetector。这几乎在所有情况下都很有效,除了一个。

正常情况下,当我双击地图上的某个项目时,我切换到编辑模式GestureDetector,当我在地图上的任何项目外双击时,切换回正常模式GestureDetector。这按预期工作。现在,我在工具栏中单击HomeAsUp按钮时添加了一个从编辑模式进入正常模式的功能。我可以看到手势检测器在单击Home按钮时切换到正常模式GestureDetector,我收到onTouch事件和onDown事件,但是onScroll没有被调用,即使我可以在我的logcat中看到onTouch收到一个ACTION_DOWN事件和大量ACTION_MOVE事件。如果我把手指放下并移动它足够长时间,就会触发onLongPress事件(但它不应该是,因为我一直在移动我的手指)。

此行为仅在我第一次尝试在单击“主页”按钮后滚动时发生,后续事件正常工作。每次单击“主页”按钮退出编辑模式时都会发生这种情况。即使发生了所有正确的事件(ACTION_DOWN后跟许多ACTION_MOVE事件),在这种特定情况下也不会调用onScroll事件似乎是一个错误。

有人可以解释为什么在这个特定情况下没有调用onScroll事件吗?

2 个答案:

答案 0 :(得分:0)

我仍然没有弄清楚为什么在这种情况下没有调用onScroll事件,但我已经做了一个解决方案,解决了我的问题。

我创建了一个模拟触摸事件的函数,因此GestureDetector将首先使用模拟触摸事件,然后它将正常工作。

posts_per_page

当我使用HomeAsUp按钮从编辑模式切换到普通模式时,我只需调用此public void simulateTouch() { MotionEvent event = MotionEvent.obtain(1, 2, MotionEvent.ACTION_UP, 0, 0, 0); onTouchEvent(event); } 函数,之后GestureDetector似乎被重置,因此它从那里开始正常工作。

答案 1 :(得分:0)

当我向onDoubleTap(MotionEvent e)添加SimpleOnGestureListener覆盖时,我有类似的行为,然后直到我做出类似甩动的手势之前,双击滚动才被识别。将返回值onDoubleTap(MotionEvent e)更改为false后,它开始正常工作。