一、场景
在App中,如果使用ViewPager2+fragment的方式,实现页面的左右滑动,而其中的页面使用了WebView加载网页,且是可以上下滑动的网页,当我们在网页滑动的时候,会直接切换到下一个viewpager的页面,而不是优先响应webview的滑动。
使用的是webview库加载网页
implementation 'io.github.justson:agentweb-core:v5.1.1-androidx'
二、解决方案
实现思路是拦截webview的事件,当他在屏幕两边的200像素范围内为边缘触摸时才可以左右滑动viewpager2,为了提升用户体验,像素值可根据自己需求设计。
if (point > 0 && point < 200 || point > dm.widthPixels - 200 && point < dm.widthPixels)
private DisplayMetrics dm;
private WindowManager manager;
private void initWebView(String realUrl) {
dm = new DisplayMetrics();
manager = (WindowManager) myActivity.getSystemService(Context.WINDOW_SERVICE);
manager.getDefaultDisplay().getMetrics(dm);
mAgentWeb.getWebCreator().getWebView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
int point = (int) event.getX();
if (point > 0 && point < 200 || point > dm.widthPixels - 200 && point < dm.widthPixels) {
mAgentWeb.getWebCreator().getWebView().requestDisallowInterceptTouchEvent(false);
} else {
mAgentWeb.getWebCreator().getWebView().requestDisallowInterceptTouchEvent(true);
}
break;
}
return false;
}
});
}