我有一个GestureDetector,我正在喂它MotionEvents,我非常依赖它的返回值。
现在当滚动量太低时,源代码中有以下行(android.view.GestureDetector line 578):
case MotionEvent.ACTION_MOVE:
// several checks that all not apply
else if ((Math.abs(scrollX) >= 1) || (Math.abs(scrollY) >= 1)) {
}
但如果滚动限制太低,则最后一个if不适用。想象一下手指滚动真的很慢,停一秒钟,继续滚动。当手指停止时,检测器返回FALSE,这意味着我将事件提供给下一层等,这不应该发生,因为它仍然是一个滚动。
如果我扩展探测器并覆盖整个方法,我必须复制粘贴除该行之外的所有内容并在那里输入0。
有人能想出一个更简单的解决方案,我的卷轴不会被打断吗?
答案 0 :(得分:0)
如果手势监听器返回false并且您意识到用户抬起手指,那么手动收听ACTION_UP事件然后将事件提供给“下一层”怎么样?
@Override
public boolean onTouch(View v, MotionEvent event) {
// ACTION_UP means user lifted all his fingers
boolean actionUp = (event.getActionMasked() == MotionEvent.ACTION_UP);
boolean result = mGestureDetector.onTouchEvent(event);
if (!result && actionUp) {
// Scrolling really finished, do something
}
}