专栏首页应用案例一行代码搞定SwipeRefreshLayout拦截事件

一行代码搞定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 条评论
登录 后参与评论

相关文章

  • 微信想用小程序挑战传统App?

    12月28日,微信小程序迎来年末最后一次更新,不仅给予了小程序通过下拉菜单快速进入的入口,其新增的“小游戏”类目同样瞩目。 当大家还沉浸在跳一跳的趣味体验时,“...

    企鹅号小编
  • 除了“跳一跳”,微信还有什么小程序可以玩?

    微信小程序是什么? ? 最近被微信“跳一跳”完美刷屏,但是你知道吗,微信的小程序功能其实比我们想象中强大,绝对不止跳一跳这么简单。 今天就给大家推荐一些亲测实用...

    企鹅号小编
  • 微信小程序替代苹果App Store的野心 也终于快要如愿以偿了

    近日微信小程序上线了游戏功能,同样这样是微信小程序最重要的一次更新。这次小程序更新带来了游戏控件、本地存储、3D渲染等功能,这意味着小程序终于可以同原生应用分庭...

    企鹅号小编
  • 【我们一起写框架】MVVM的WPF框架(四)—DataGrid

    这个框架写到这里,应该有很多同学发现,框架很多地方的细节,其实是违背了MVVM的设计逻辑的。

    Kiba518
  • 【我们一起写框架】MVVM的WPF框架(五)—完结篇

    框架设计不应该局限于任何一种设计模式,我们在设计框架时,应该将设计模式揉碎,再重组;这样设计出来的框架才具有一战之力。

    Kiba518
  • 自然语言处理:日期识别

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    程裕强
  • OpenCV 无法打开opencv_woldxxxd.lib的问题

    Aidol
  • Android 打造一个丝滑的自动轮播控件

    现在很多的 App 都有自动轮播的 banner 界面,用于展示广告图片或者显示当前比较热门的一些活动,除了具备比较酷炫的效果之外,通过轮播的方式来减少对界面的...

    developerHaoz
  • Tensorflow中的降维函数tf.reduce_*使用总结

    在使用tensorflow时常常会使用到tf.reduce_*这类的函数,在此对一些常见的函数进行汇总

    砸漏
  • 小程序渲染

    在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。通过遍历数据,将数据展示,类似vue中的 v-for。 wx:for-...

    用户2305175

扫码关注云+社区

领取腾讯云代金券