在ViewPager, ScrollView, ListView等容器控件中内嵌了webview,特别是webview的大小固定的情况下,会出现滑动的冲突,可以采用如下自定义的webview来完美解决。
/**
* 主要解决viewPager嵌套webView横向滚动问题
*/
public class ExtendedWebView extends WebView {
private boolean isScrollX = false;
public ExtendedWebView(Context context) {
super(context);
}
public ExtendedWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (MotionEventCompat.getPointerCount(event) == 1) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isScrollX = false;
//事件由webview处理
getParent().getParent()
.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
//嵌套Viewpager时
getParent().getParent()
.requestDisallowInterceptTouchEvent(!isScrollX);
break;
default:
getParent().getParent()
.requestDisallowInterceptTouchEvent(false);
}
} else {
//使webview可以双指缩放(前提是webview必须开启缩放功能,并且加载的网页也支持缩放)
getParent().getParent().
requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(event);
}
//当webview滚动到边界时执行
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
isScrollX = clampedX;
}
}
总结
这个方法是通过验证了的,真是可行。而且webview中js控制的轮播效果也出来了。