我有一个扩展FrameLayout的视图,需要通知它上面的滚动事件。 此视图有一个实现GestureDetector的类的实例,该类由overrideInInterceptTouchEvent方法调用。
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; }
}
唯一的问题是onnown和onLongPress方法可以在我尝试滚动时调用,但实际的onScroll方法永远不会被调用。
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = super.onInterceptTouchEvent(event);
if (gestureDetector.onTouchEvent(event)) {
return result;
} else {
return false;
}
}
答案 0 :(得分:0)
onInterceptTouchEvent
, true
就不再被调用。之后事件会直接发送到onTouchEvent
(因为它们现在正被儿童截获)。
您需要在此处进行两项更改:
OnGestureListener.onDown()
应该返回true
,以便检测器可以处理更复杂的手势,例如滚动onInterceptTouchEvent
应始终返回false
以保持事件流流向此方法