Ключом к этому является проверка возвращаемого значения из gestDetector.onTouchEvent и, если gestDetector не обработал событие, а затем передать его суперклассу WebView. Кроме того, обязательно возвращайте false из метода onDown, даже если вы что-то с ним делаете, чтобы суперкласс мог инициализировать свое внутреннее состояние. Если ваш метод onFling обрабатывает событие, возвращает «true», в противном случае возвращает «false», чтобы могли применяться методы по умолчанию.
public class FlingView extends WebView implements OnGestureListener {
private GestureDetector gestureDetector;
public FlingView(Context context) {
super(context);
init();
}
public void init() {
gestureDetector = new GestureDetector(this.getContext(), this);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
return (
gestureDetector.onTouchEvent(e) || super.onTouchEvent(e));
}
/* OnGestureListener events */
public boolean onDown(MotionEvent e1) {
// Initialize event here
...
// give the superclass a chance at tap events
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (test) {
// handle fling
...
return true;
} else {
// let superclass handle the event
return false;
}
}
}