Android笔记(十八):ViewPager2嵌套WebView手势冲突问题

正常情况下,viewpage2嵌套webview会导致网页内容无法滑动,解决该问题的核心在与利用requestDisallowInterceptTouchEventonOverScrolled这两个方法
重写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方法,其中clampedXclampedY表示水平/垂直方向是否滚动到边界,是的话就恢复允许父视图拦截事件的行为。

猜你喜欢

转载自blog.csdn.net/weixin_40855673/article/details/123618532
今日推荐