分享一个我日常开发当中,经常使用到的开源库。几乎所有的的列表都会有刷新需求,好的刷新交互可以大大提升用户的体验感。这个库有很多特点:
- 支持多点触摸
- 支持淘宝二楼和二级刷新
- 支持嵌套多层的视图结构 Layout (LinearLayout,FrameLayout...)
- 支持所有的 View(AbsListView、RecyclerView、WebView....View)
- 支持自定义并且已经集成了很多炫酷的 Header 和 Footer.
- 支持和 ListView 的无缝同步滚动 和 CoordinatorLayout 的嵌套滚动 .
- 支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,而不用手动上拉).
- 支持自定义回弹动画的插值器,实现各种炫酷的动画效果.
- 支持设置主题来适配任何场景的 App,不会出现炫酷但很尴尬的情况.
- 支持设多种滑动方式:平移、拉伸、背后固定、顶层固定、全屏
- 支持所有可滚动视图的越界回弹
- 支持 Header 和 Footer 交换混用
- 支持 AndroidX
- 支持横向刷新
集成依赖
核心依赖
implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1'
刷新头部可选依赖
// 经典刷新头
implementation 'com.scwang.smart:refresh-header-classics:2.0.1'
// 雷达刷新头
implementation 'com.scwang.smart:refresh-header-radar:2.0.1'
// 虚拟刷新头
implementation 'com.scwang.smart:refresh-header-falsify:2.0.1'
// 谷歌刷新头
implementation 'com.scwang.smart:refresh-header-material:2.0.1'
//二级刷新头
implementation 'com.scwang.smart:refresh-header-two-level:2.0.1'
刷新底部可选依赖
// 球脉冲加载
implementation 'com.scwang.smart:refresh-footer-ball:2.0.1'
// 经典加载
implementation 'com.scwang.smart:refresh-footer-classics:2.0.1'
使用示例
1.全局配置刷新样式
SmartRefreshLayout.setDefaultRefreshHeaderCreator { _, _ -> MaterialHeader(this) }
SmartRefreshLayout.setDefaultRefreshFooterCreator { _, _ -> ClassicsFooter(this) }
2.XML使用
<com.scwang.smart.refresh.layout.SmartRefreshLayout
android:id="@+id/taskPage"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/taskRv"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:overScrollMode="never" /></com.scwang.smart.refresh.layout.SmartRefreshLayout>
这样就是简单的使用方式,下面来分享一下常用的方法。
下拉刷新常用的方法
1.自动刷新:
refreshLayout.autoRefresh()
2.关闭刷新,一般在网络请求成功之后,我们可以主动关闭刷新:
refreshLayout.finishRefresh()
这两个是刷新最常用的方法,一般情况交互这两个方法就足够了。
上拉加载常用的方法
1.自动加载:
refreshLayout.autoLoadMore()
2.关闭加载,一般在网络请求成功之后,我们可以主动关闭加载:
refreshLayout.finishLoadMore()
3.设置列表没有更多数据,不让用户出发加载更多的操作:
refreshLayout.setNoMoreData(false)
false
有更多的数据,true
没有更多数据。