解决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谁来捕获处理滚动事件。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,005评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,446评论 4 61
  • 很快或许就得说一句,别了,兰卡,但我会说,再会。 斯里蘭卡 斯里兰卡,全称斯里兰卡民主社会主义共和国(The De...
    WOODHouse阅读 2,490评论 0 0
  • 一天狂风未歇 夹着小雨 昨日归家复来 两眼晕转 头上一片混乱 天也暗沉 渐至黑夜 还在辗转难眠 不想舍友盛来一碗面...
    赤子天涯心阅读 1,202评论 0 1

友情链接更多精彩内容