美文网首页
解决SwipeRefreshView与WebView滚动冲突问题

解决SwipeRefreshView与WebView滚动冲突问题

作者: jiangjh | 来源:发表于2017-12-02 00:21 被阅读0次

    这种滚动冲突,我遇到的情况是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滚动冲突问题

          本文链接:https://www.haomeiwen.com/subject/mnpgbxtx.html