我有一个扩展 FrameLayout 的视图,需要通知它上面的滚动事件。此视图有一个实现 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;
}
}