У меня WebView
(s) внутри RecyclerView
.Чтобы получить возможность плавной прокрутки, чтобы при прокрутке пользователя за прокрутку отвечал RecyclerView
(WebView
не должен прокручиваться), я вызвал getParent().requestDisallowInterceptTouchEvent(false);
внутри webview#onTouchEvent(event)
, когда есть только одна точка касания и она движется вертикально(прокрутка вверх и вниз).
private void handleSingleFingerTouch(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = ev.getX();
y1 = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
x2 = ev.getX();
y2 = ev.getY();
// -ve param for canScrollHorizontally is to check scroll left. +ve otherwise
if (Math.abs(x1 - x2) >= Math.abs(y1 - y2)
&& canScrollHorizontally((int) (x1 - x2))) {
// scrolling horizontally. Retain the touch inside the webView.
getParent().requestDisallowInterceptTouchEvent(true);
} else {
// scrolling vertically. Share the touch event with the parent.
getParent().requestDisallowInterceptTouchEvent(false);
}
x1 = x2;
y1 = y2;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
boolean multiTouch = ev.getPointerCount() > 1;
if (multiTouch) {
getParent().requestDisallowInterceptTouchEvent(true);
} else {
handleSingleFingerTouch(ev);
}
return super.onTouchEvent(ev);
}
Это работает, как и ожидалось, только с одной ошибкой, я обнаружил, что пока прокручивается RecyclerView
(и веб-просмотр), и я касаюсь внутри WebView
, тогда RecyclerView
перестает прокручиваться, как ожидается, тогда, еслиЯ не поднимаю палец, но держу палец на экране и пытаюсь увеличить изображение, веб-изображение не будет увеличиваться и фактически вообще не получит сенсорного события.Я должен поднять пальцы и коснуться снова, чтобы увеличить.Я знаю, что это потому, что getParent().requestDisallowInterceptTouchEvent(false);
не будет отменен, если пользовательский интерфейс не получит CANCEL
или UP
событие.Я попытался реализовать интерфейс, который вызывает getParent().requestDisallowInterceptTouchEvent(true);
, когда происходит мультитач.Хотя это и было вызвано, но, кажется, это не работает.Увеличение по-прежнему не происходит, и onTouchEvent
внутри WebView
по-прежнему не срабатывает.Есть идеи, чтобы решить это?