У меня есть представление, которое расширяет 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;
}
}