SmoothRefreshLayout
一个高效的Android刷新库,理论上支持所有的视图,比官方的SwipeRefreshLayout更强大且使用方便.
本开源库的部分代码来自android-Ultra-Pull-To-Refresh.
非常感谢他提供的这么棒的开源项目!
特性:
- 理论上支持所有的视图,且可根据具体需求高效适配.
- 支持多点触摸.
- 支持嵌套滑动,完整实现了NestedScrollingChild,NestedScrollingParent 接口,玩转CoordinatorLayout.
- 直接继承自ViewGroup,拥有卓越的性能,支持类FameLayout的特性(Gravity、Margin).
- 支持自动刷新、自动上拉加载、到底自动加载更多(不推荐,建议使用Adapter实现,可自定义到底判断逻辑回调实现预加载更多).
- 支持越界回弹.
- 支持刷新视图自定样式:STYLE_DEFAULT(默认不改变大小)、STYLE_SCALE(动态改变大小,一直会重测量并布局,所以性能会有损失)、STYLE_PIN(不会改变视图大小,固定在顶部或者底部)、STYLE_FOLLOW_SCALE(先纵向跟随移动并且不改变视图大小,大于视图高度后动态改变视图大小且性能会有损失)、STYLE_FOLLOW_PIN(不会改变视图大小,先纵向跟随移动,大于视图高度后固定)、STYLE_FOLLOW_CENTER(不会改变视图大小,先纵向跟随移动,大于视图高度后让视图保持在移动的距离中心点).
- 支持二级刷新事件(TwoLevelSmoothRefreshLayout),PS:淘宝二楼、京东活动.
- 支持横向刷新(HorizontalSmoothRefreshLayout).
- 支持ListView、GridView、RecyclerView加载更多的同步平滑滚动.
- 支持多状态视图:STATE_CONTENT(默认状态)、STATE_ERROR(异常状态)、STATE_EMPTY(空状态)、STATE_CUSTOM(自定义状态).
- 支持手势:同步Fling(刷新视图仍可见的情况下,会先回滚隐藏刷新视图,而后向下传递Fling手势).
- 支持作为可拉伸内部视图布局使用(类小米设置页效果).
- 丰富的回调接口和调试信息,可利用现有API实现丰富的效果.
演示程序
下载 Demo.apk
更新日志
老版本升级务必查看
快照
- 测试拉伸收缩效果(1.6.2版本添加)
- 测试横向拉伸收缩效果(1.6.2版本添加)
- 测试横向刷新(1.5.0版本添加)
- 测试QQ浏览器样式
- 测试QQ活动样式
- 测试2级刷新
- 包含ListView
- 包含RecyclerView
- 包含ViewPager
- CoordinatorLayout
- 越界回弹模式
- 测试嵌套滑动
使用
Gradle
repositories {
...
maven { url 'https://jitpack.io' }
}
dependencies {
//核心基础库,包含绝大多数功能,扩展库必须依赖本库(从1.6.0版本开始Core库不再自带刷新视图实现,只包含核心功能)
compile 'com.github.dkzwm.SmoothRefreshLayout:core:1.6.3.3'
//默认Classic样式的刷新视图实现库(从1.6.0版本才有,是从老版本的Core库中拆分出来的库)
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-classic:1.6.3.3'
//默认Material样式的刷新视图实现库(从1.6.0版本才有,是从老版本的Core库中拆分出来的库)
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-material:1.6.3.3'
//工具类库,带有一些快捷配置工具(自动滚动刷新工具,快速设置AppBarLayout工具)
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-utils:1.6.3.3'
//扩展支持二级刷新库
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-two-level:1.6.3.3'
//扩展支持横向刷新库
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-horizontal:1.6.3.3'
}
在Xml中配置
<?xml version="1.0" encoding="utf-8"?>
<me.dkzwm.widget.srl.SmoothRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</me.dkzwm.widget.srl.SmoothRefreshLayout>
Java代码配置
SmoothRefreshLayout refreshLayout = (SmoothRefreshLayout)findViewById(R.id.smoothRefreshLayout);
refreshLayout.setHeaderView(new ClassicHeader(this));
refreshLayout.setOnRefreshListener(new RefreshingListenerAdapter() {
@Override
public void onRefreshBegin(boolean isRefresh) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {