正常情况下,viewpage2嵌套webview会导致网页内容无法滑动,解决该问题的核心在与利用requestDisallowInterceptTouchEvent 与onOverScrolled 这两个方法 重写WebView如下:
public class NestedWebView extends WebView{
public NestedWebView(Context context) {
super(context);
}
public NestedWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
super.requestDisallowInterceptTouchEvent(true);
}else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() ==MotionEvent.ACTION_CANCEL){
super.requestDisallowInterceptTouchEvent(false);
}
return super.onTouchEvent(event);
}
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
if (clampedX || clampedY){
super.requestDisallowInterceptTouchEvent(false);
}
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
}
- 在
onTouchEvent 方法中,当手指落在webview上时,不允许它的父视图拦截事件super.requestDisallowInterceptTouchEvent(true) ,当取消手势事件或者是手指离开webview时,恢复允许父视图拦截事件的行为。 - 当webview的网页滚动到边界的时候,会回调
onOverScrolled 方法,其中clampedX |clampedY 表示水平/垂直方向是否滚动到边界,是的话就恢复允许父视图拦截事件的行为。
|