我使用 GestureDetector
在自定义 View
中实现滚动。我的实现基于此:Smooth scrolling with inertia and edge resistance/snapback
我注意到滚动开始前有一个短暂的停顿:我检查了 onScroll
消息并注意到第一个消息仅在手指进行较大移动后才到达,这会在滚动开始时造成明显的滞后滚动。之后滚动很流畅。
似乎 GestureDetector
仅在运动事件之间的最小距离之后才开始发送 onScroll
消息,以确保手势不是长按或点击(顺便说一句,我设置了 setIsLongpressEnabled(false)
).
有没有什么方法可以改变这种行为并创建平滑的滚动,而无需使用低级触摸事件实现自定义滚动手势?
最佳答案
答案是否定的,您必须创建自己的GestureDetector
。如果您查看 Android 源代码 (GestureDetector.java),第 524 到 540 行用于检测单击的“触摸倾斜”。特别是第 528 行阻止调用 onScroll
事件,直到移动超出触摸溢出(从 View 配置中拉出)。您无法更改 View 配置,并且斜坡被硬编码为 16 像素。这是导致您看到的滞后的半径。
关于android - GestureDetector onScroll 的滚动延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7108578/