解决SwipeRefreshView与WebView滚动冲突问题

这种滚动冲突,我遇到的情况是WebView中加了一个网页,网页中有嵌套的滚动布局,导致嵌套滚动与SwipeRefreshView无法协调。

  • 自定义WebView,重写 onTouchEvent
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                // 有些网页,上下滚动,getScrollY()恒为0, 推测是滚动事件被网页内布局捕获,所以网页内的布局内部滚动,网页大框架整体没有滚动;
                // 所以针对这种情况,手动向上滚动1,那么getScrollY()会为1;
                // 当向下滚动到达顶部时,即网页内布局内部的滚动到达顶部,事件不被内部捕获,被网页大框架捕获,会把向上滚动的1拉下来
                // 个人理解(by jiangjh)
                if(this.getScrollY() <= 0){
                    this.scrollTo(0,1);
                }
                break;
            case MotionEvent.ACTION_UP:
                break;
        }
        return super.onTouchEvent(event);
    }
  • 在调用处,设置SwipeRefreshViewOnChildScrollUpCallback
mSwipeRefreshView.setOnChildScrollUpCallback(new SwipeRefreshLayout.OnChildScrollUpCallback() {
       @Override
       public boolean canChildScrollUp(SwipeRefreshLayout parent, @Nullable View child) {
           return child.getScrollY() > 0;
       }
});
通过webview顶部是否增加1长度的滚动来判断SwipeRefreshView和WebView谁来捕获处理滚动事件。

你可能感兴趣的:(解决SwipeRefreshView与WebView滚动冲突问题)