SmartRefreshLayout
🔥下拉刷新、上拉加载、二级刷新、淘宝二楼、RefreshLayout、OverScroll,Android智能下拉刷新框架,支持越界回弹、越界拖动,具有极强的扩展性,集成了几十种炫酷的Header和 Footer。
Install / Use
/learn @scwang90/SmartRefreshLayoutREADME
Android智能下拉刷新框架-SmartRefreshLayout
English | 中文
SmartRefreshLayout以打造一个强大,稳定,成熟的下拉刷新框架为目标,并集成各种的炫酷、多样、实用、美观的Header和Footer。 正如名字所说,SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。 它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout, 其他第三方的 Ultra-Pull-To-Refresh、TwinklingRefreshLayout 。 还集成了各种炫酷的 Header 和 Footer。
IOS版本
IOS版本:链接
国内加速
github 由于你懂的原因,下载速度缓慢,图片也无法查看,可以跳转 Gitee镜像
特点功能:
- 支持多点触摸
- 支持淘宝二楼和二级刷新
- 支持嵌套多层的视图结构 Layout (LinearLayout,FrameLayout...)
- 支持所有的 View(AbsListView、RecyclerView、WebView....View)
- 支持自定义并且已经集成了很多炫酷的 Header 和 Footer.
- 支持和 ListView 的无缝同步滚动 和 CoordinatorLayout 的嵌套滚动 .
- 支持自动刷新、自动上拉加载(自动检测列表惯性滚动到底部,而不用手动上拉).
- 支持自定义回弹动画的插值器,实现各种炫酷的动画效果.
- 支持设置主题来适配任何场景的 App,不会出现炫酷但很尴尬的情况.
- 支持设多种滑动方式:平移、拉伸、背后固定、顶层固定、全屏
- 支持所有可滚动视图的越界回弹
- 支持 Header 和 Footer 交换混用
- 支持 AndroidX
- 支持横向刷新
- 支持IOS
传送门
Demo

项目演示
|个人首页|微博列表|
|:---:|:---:|
|
|
|
|餐饮美食|个人中心|
|:---:|:---:|
|
|
|
样式演示 Style
|Delivery|DropBox|
|:---:|:---:|
|
|
|
|Refresh-your-delivery|Dropbox-Refresh|
上面这两个是我自己实现的,下面的是我把github上其它优秀的Header进行的整理和集合还有优化:
|BezierRadar|BezierCircle|
|:---:|:---:|
|
|
|
|Pull To Refresh|Pull Down To Refresh|
|FlyRefresh|Classics|
|:---:|:---:|
|
|
|
|FlyRefresh|ClassicsHeader|
|Phoenix|Taurus|
|:---:|:---:|
|
|
|
|Yalantis/Phoenix|Yalantis/Taurus
|BattleCity|HitBlock|
|:---:|:---:|
|
|
|
|FunGame/BattleCity|FunGame/HitBlock
|WaveSwipe|Material|
|:---:|:---:|
|
|
|
|WaveSwipeRefreshLayout|MaterialHeader
|StoreHouse|WaterDrop|
|:---:|:---:|
|
|
|
|CRefreshLayout|WaterDrop
看到这么多炫酷的Header,是不是觉得很棒?这时你或许会担心这么多的Header集成在一起,但是平时只会用到一个,是不是要引入很多无用的代码和资源? V2.x 版本已经把依赖库拆分成8个包啦,用到的时候自行引用就可以啦!
- refresh-layout-kernel 核心必须依赖
- refresh-header-classics 经典刷新头
- refresh-header-radar 雷达刷新头
- refresh-header-falsify 虚拟刷新头
- refresh-header-material 谷歌刷新头
- refresh-header-two-level 二级刷新头
- refresh-footer-ball 球脉冲加载
- refresh-footer-classics 经典加载
注:在
Demo中有些炫酷的Header,他们并不具有实用性,所以没有打包上传仓库,所以无法直接添加依赖。 如果你确实想要在App中集成它们,请自行找到对应个tag的分支,把对应版本的Header源码拷贝到自己的项目中,作为自定义Header来使用。
需要源码引用的
Header如下:
BezierCircleHeader DeliveryHeader DropBoxHeader FlyRefreshHeader FunGameBattleCityHeader FunGameHitBlockHeader PhoenixHeader StoreHouseHeader TaurusHeader WaterDropHeader WaveSwipeHeader
简单用例
1.在 build.gradle 中添加依赖
注:3.x 版本已经发布,主要升级为使用
androidx替换support, 并且目前尚未添加新功能, 如果你还需要使用 support 请使用 2.x 版本。
implementation 'androidx.appcompat:appcompat:1.0.0' //必须 1.0.0 以上
implementation 'io.github.scwang90:refresh-layout-kernel:3.0.0-alpha' //核心必须依赖
implementation 'io.github.scwang90:refresh-header-classics:3.0.0-alpha' //经典刷新头
implementation 'io.github.scwang90:refresh-header-radar:3.0.0-alpha' //雷达刷新头
implementation 'io.github.scwang90:refresh-header-falsify:3.0.0-alpha' //虚拟刷新头
implementation 'io.github.scwang90:refresh-header-material:3.0.0-alpha' //谷歌刷新头
implementation 'io.github.scwang90:refresh-header-two-level:3.0.0-alpha' //二级刷新头
implementation 'io.github.scwang90:refresh-footer-ball:3.0.0-alpha' //球脉冲加载
implementation 'io.github.scwang90:refresh-footer-classics:3.0.0-alpha' //经典加载
2.在XML布局文件中添加 SmartRefreshLayout
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smart.refresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.scwang.smart.refresh.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
android:background="#fff" />
<com.scwang.smart.refresh.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
3.在 Activity 或者 Fragment 中添加代码
RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setRefreshHeader(new ClassicsHeader(this));
refreshLayout.setRefreshFooter(new ClassicsFooter(this));
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
}
});
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshlayout) {
refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
}
});
使用指定的 Header 和 Footer
1.方法一 全局设置
public class App extends Application {
//static 代码段可以防止内存泄露
static {
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
