У меня есть 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
по-прежнему не срабатывает. Любая идея решить эту проблему?
webView.getSettings().setBuiltInZoomControls(true);
- person Saikrishna Rajaraman   schedule 29.09.2018