轉(zhuǎn)載: Android智能下拉刷新框架-SmartRefreshLayout
English | 中文
SmartRefreshLayout以打造一個強(qiáng)大,穩(wěn)定,成熟的下拉刷新框架為目標(biāo)搀菩,并集成各種的炫酷、多樣、實(shí)用绕辖、美觀的Header和Footer。 正如名字所說擂红,SmartRefreshLayout是一個“聰明”或者“智能”的下拉刷新布局仪际,由于它的“智能”,它不只是支持所有的View昵骤,還支持多層嵌套的視圖結(jié)構(gòu)树碱。 它繼承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能变秦。 也吸取了現(xiàn)在流行的各種刷新布局的優(yōu)點(diǎn)成榜,包括谷歌官方的 SwipeRefreshLayout, 其他第三方的 Ultra-Pull-To-Refresh蹦玫、TwinklingRefreshLayout 赎婚。 還集成了各種炫酷的 Header 和 Footer。
SmartRefreshLayout
github 由于你懂的原因樱溉,下載速度緩慢挣输,圖片也無法查看,可以跳轉(zhuǎn) SmartRefreshLayout
特點(diǎn)功能:
- 支持多點(diǎn)觸摸
- 支持淘寶二樓和二級刷新
- 支持嵌套多層的視圖結(jié)構(gòu) Layout (LinearLayout,FrameLayout...)
- 支持所有的 View(AbsListView福贞、RecyclerView撩嚼、WebView....View)
- 支持自定義并且已經(jīng)集成了很多炫酷的 Header 和 Footer.
- 支持和 ListView 的無縫同步滾動 和 CoordinatorLayout 的嵌套滾動 .
- 支持自動刷新、自動上拉加載(自動檢測列表慣性滾動到底部,而不用手動上拉).
- 支持自定義回彈動畫的插值器完丽,實(shí)現(xiàn)各種炫酷的動畫效果.
- 支持設(shè)置主題來適配任何場景的 App向瓷,不會出現(xiàn)炫酷但很尷尬的情況.
- 支持設(shè)多種滑動方式:平移、拉伸舰涌、背后固定猖任、頂層固定、全屏
- 支持所有可滾動視圖的越界回彈
- 支持 Header 和 Footer 交換混用
- 支持 AndroidX
- 支持橫向刷新
傳送門
Demo
項(xiàng)目演示
個人首頁 | 微博列表 |
---|---|
餐飲美食 | 個人中心 |
---|---|
樣式演示 Style
Delivery | DropBox |
---|---|
Refresh-your-delivery | Dropbox-Refresh |
上面這兩個是我自己實(shí)現(xiàn)的瓷耙,下面的是我把github上其它優(yōu)秀的Header進(jìn)行的整理和集合還有優(yōu)化:
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朱躺,是不是覺得很棒?這時(shí)你或許會擔(dān)心這么多的Header集成在一起搁痛,但是平時(shí)只會用到一個长搀,是不是要引入很多無用的代碼和資源? V2.x 版本已經(jīng)把依賴庫拆分成8個包啦鸡典,用到的時(shí)候自行引用就可以啦源请!
- refresh-layout-kernel 核心必須依賴
- refresh-header-classics 經(jīng)典刷新頭
- refresh-header-radar 雷達(dá)刷新頭
- refresh-header-falsify 虛擬刷新頭
- refresh-header-material 谷歌刷新頭
- refresh-header-two-level 二級刷新頭
- refresh-footer-ball 球脈沖加載
- refresh-footer-classics 經(jīng)典加載
簡單用例
1.在 build.gradle 中添加依賴
【V1.1.0】 如果正在使用1.x 版本請調(diào)轉(zhuǎn),當(dāng)前2.0 版本已經(jīng)重定制彻况,不支持升級谁尸,請?jiān)谛马?xiàng)目中使用。
V2.x 相對于 V1.x 對包名做了修改如:com.scwang.smartrefresh 改為 com.scwang.smart.refresh纽甘。 建議在新項(xiàng)目中使用良蛮,如果項(xiàng)目升級,java悍赢,xml 中都需要做包名替換决瞳,比較麻煩。 但主要改動還是對 Smart 進(jìn)行分包左权,減小不必要的依賴皮胡,比如不使用二級刷新就不依賴,避免代碼冗余赏迟。 但是未對 SmartRefreshHeader 分包屡贺,里面有十多個Header,建議需要使用哪個就復(fù)制哪個的源碼到項(xiàng)目中瀑梗。 當(dāng)然:大家也可以在討論區(qū)討論投票烹笔,選出里面使用頻率比較高的Header裳扯,然后單獨(dú)分離出來抛丽。
compile 'com.android.support:appcompat-v7:25.3.1' //必須 25.3.1 以上
// 注意:分包之后不會有默認(rèn)的Header和Footer需要手動添加!還是原來的三種方法饰豺!
implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1' //核心必須依賴
implementation 'com.scwang.smart:refresh-header-classics:2.0.1' //經(jīng)典刷新頭
implementation 'com.scwang.smart:refresh-header-radar:2.0.1' //雷達(dá)刷新頭
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' //經(jīng)典加載
如果使用 AndroidX 先在 gradle.properties 中添加亿鲜,兩行都不能少噢~
android.useAndroidX=true
android.enableJetifier=true
需要依賴 androidx.appcompat
implementation 'androidx.appcompat:appcompat:1.0.0' //必須 1.0.0 以上
implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1' //核心必須依賴
implementation 'com.scwang.smart:refresh-header-classics:2.0.1' //經(jīng)典刷新頭
implementation 'com.scwang.smart:refresh-header-radar:2.0.1' //雷達(dá)刷新頭
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' //經(jīng)典加載
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"/>
<android.support.v7.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.方法一 全局設(shè)置
public class App extends Application {
//static 代碼段可以防止內(nèi)存泄露
static {
//設(shè)置全局的Header構(gòu)建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局設(shè)置主題顏色
return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定為經(jīng)典Header,默認(rèn)是 貝塞爾雷達(dá)Header
}
});
//設(shè)置全局的Footer構(gòu)建器
SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
//指定為經(jīng)典Footer,默認(rèn)是 BallPulseFooter
return new ClassicsFooter(context).setDrawableSize(20);
}
});
}
}
注意:方法一 設(shè)置的Header和Footer的優(yōu)先級是最低的蒿柳,如果同時(shí)還使用了方法二饶套、三,將會被其它方法取代
2.方法二 XML布局文件指定
<com.scwang.smart.refresh.layout.SmartRefreshLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#444444"
app:srlPrimaryColor="#444444"
app:srlAccentColor="@android:color/white"
app:srlEnablePreviewInEditMode="true">
<!--srlAccentColor srlPrimaryColor 將會改變 Header 和 Footer 的主題顏色-->
<!--srlEnablePreviewInEditMode 可以開啟和關(guān)閉預(yù)覽功能-->
<com.scwang.smart.refresh.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/dimenPaddingCommon"
android:background="@android:color/white"
android:text="@string/description_define_in_xml"/>
<com.scwang.smart.refresh.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.scwang.smart.refresh.layout.SmartRefreshLayout>
注意:方法二 XML設(shè)置的Header和Footer的優(yōu)先級是中等的垒探,會被方法三覆蓋妓蛮。而且使用本方法的時(shí)候,Android Studio 會有預(yù)覽效果圾叼,如下圖:
不過不用擔(dān)心蛤克,只是預(yù)覽效果,運(yùn)行的時(shí)候只有下拉才會出現(xiàn)~
3.方法三 Java代碼設(shè)置
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
//設(shè)置 Header 為 貝塞爾雷達(dá) 樣式
refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
//設(shè)置 Footer 為 球脈沖 樣式
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
4.更多使用說明
混淆
SmartRefreshLayout 不需要添加混淆過濾代碼夷蚊,并且已經(jīng)混淆測試通過构挤,如果你在項(xiàng)目的使用中混淆之后出現(xiàn)問題,請及時(shí)通知我惕鼓。
友情鏈接
github/Loror
github/faith-hb/WidgetCase
github/Bamboy120315/Freedom
github/TommyLemon/APIJSON
github/dengyuhan
github/zrp2017
github/fly803/BaseProject
github/razerdp
github/SuperChenC/s-mvp
github/KingJA/LoadSir
github/jianshijiuyou
github/zxy198717
github/addappcn
github/RainliFu
github/sugarya
github/stormzhang
其他作品
MultiWaveHeader
SmartRefreshHorizontal
詩和遠(yuǎn)方
感謝
SwipeRefreshLayout
Ultra-Pull-To-Refresh
TwinklingRefreshLayout
BeautifulRefreshLayout