一行代码搞定SwipeRefreshLayout拦截事件

SwipeRefreshLayout这个控件大家可能几百年前就已经在熟练使用了,相关的博客也多不胜数,方法也许不同,但实质都是一样的,写这个的目的也只是为了先把公众号和星球转起来。

SwipeRefreshLayout是Android自己支持库的下拉刷新控件,官方文档中提示,只有其包裹的孩子是RecyclerView、ListView、ScrollView等可滑动控件才能正常执行下拉刷新完整逻辑,显示下拉刷新图标以及回收图标。如果是非滑动控件,比如我们会常用到Material Design设计风格中的CoordinatorLayout控件AppBarLayout结合RecyclerView的使用,下拉刷新就会出现拦截问题导致无法滑动列表。

很多博客对SwipeRefreshLayout都介绍得很详细,包括源码的分析,以及分析并解决遇到各种问题。对于列表拦截冲突的解决方法,大致都是根据查看onInterceptTouchEvent方法里面的拦截机制,根据判断逻辑继承SwipeRefreshLayout类重写canChildScrollUp()来解决,其实有个更简单粗暴的方法,直接按照自己的想要的滑动逻辑来设置是否拦截就可以了,上代码

public classAdvanceSwipeRefreshLayoutextendsSwipeRefreshLayout {

privateOnPreInterceptTouchEventDelegatemOnPreInterceptTouchEventDelegate;

publicAdvanceSwipeRefreshLayout(Context context) {

super(context);

}

publicAdvanceSwipeRefreshLayout(Context context,AttributeSet attrs) {

super(context,attrs);

mConfiguration= ViewConfiguration.get(context);

}

@Override

public booleanonInterceptTouchEvent(MotionEvent ev) {

booleandisallowIntercept =false;

if(mOnPreInterceptTouchEventDelegate!=null)

disallowIntercept =mOnPreInterceptTouchEventDelegate.shouldDisallowInterceptTouchEvent(ev);

if(disallowIntercept) {

return false;

}

return super.onInterceptTouchEvent(ev);

}

public voidsetOnPreInterceptTouchEventDelegate(OnPreInterceptTouchEventDelegate listener) {

mOnPreInterceptTouchEventDelegate= listener;

}

public interfaceOnPreInterceptTouchEventDelegate {

booleanshouldDisallowInterceptTouchEvent(MotionEvent ev);

}

}

使用的时候根据自己的需要设置就可以了。

View appBarLayout =v_findView(mContentSection,R.id.appBarLayout);

mRefreshLayout.setOnPreInterceptTouchEventDelegate(ev ->appBarLayout.getTop()

是不是很快,如果有什么问题希望大家指正,谢谢!

参考

https://github.com/hanks-zyh/SwipeRefreshLayout

http://www.jianshu.com/p/a366e9ecb7b8

本文来自企鹅号 - Android开发者部落媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

iOS开发之ImageView复用实现图片无限轮播

  在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案。今天博客中要说的就是在ScrollView上...

24460
来自专栏Android干货园

Base封装(二)-- 封装属于自己的Library(UI篇)

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/73...

15110
来自专栏码农笔录

vue2(webpack)调用amap高德地图及其UI组件

39510
来自专栏iOS开发攻城狮的集散地

iOS演示视频转换为GIF

24280
来自专栏phodal

我的第四款编辑器:微信公众号上使用 Markdown 来显示代码

这已经是我第四次写编辑器了~~~ 第一次是在三年前(2014年4月份),当时我听说有一个工具叫 Node-Webkit,于是我就结合CodeMirror撸了一个...

22780
来自专栏有刻

Mac 小记 — 杂录

37460
来自专栏拂晓风起

createjs入门

19230
来自专栏Hans362 's Lab

UTF8-BOM编码导致Html顶部白条问题

自从给博客加上了Google Adsense的广告,就出现了一个很困扰我的问题:网页顶部莫名空出了一个白条。虽然对于网页的访问没有什么影响,但是...强迫症不能...

25310
来自专栏ionic3+

【风雨欲来的Hybird】(2)Stencil——万物皆组件,与框架无关

Stencil也不是一个新东西,出来快有10个月了,它中文意思是“模版”,是一个Web组件的编译器,它采用微小的虚拟DOM层、有效的单向数据绑定、异步渲染管道(...

14320
来自专栏Youngxj

EMLOG评论获取QQ资料

20830

扫码关注云+社区

领取腾讯云代金券