SmartRefreshLayout的使用

這是一個(gè)可自定義,多功能,多選擇,多神奇的下拉刷新,上拉加載的控件
刷新加載的動(dòng)圖效果,請(qǐng)看這里哦>源碼地址 https://github.com/scwang90/SmartRefreshLayout

build.gradle 中添加依賴

      或者直接下載源代碼導(dǎo)入類(lèi)庫(kù)'refresh-layout','refresh-header','refresh-footer'
//1.1.0 API改動(dòng)過(guò)大奕谭,老用戶升級(jí)需謹(jǐn)慎
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'//沒(méi)有使用特殊Header厘线,可以不加這行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必須)

//1.0.5 當(dāng)1.1.0出現(xiàn)問(wèn)題可以回退到1.0.5.1
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'//沒(méi)有使用特殊Header璃岳,可以不加這行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必須)
compile 'com.android.support:design:25.3.1'//版本隨意(非必須斜脂,引用可以解決無(wú)法預(yù)覽問(wèn)題)

Application中全局設(shè)置Header 和 Footer

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);
                }
            });
    }
}

\color{red}{注意:全局中設(shè)置的Header和Footer的優(yōu)先級(jí)是最低的,xml中設(shè)置的樣式是中等费封,java代碼中設(shè)置的樣式等級(jí)最高}

在XML布局文件中添加 SmartRefreshLayout

<!--這是基礎(chǔ)款,沒(méi)有添加header,和footer,默認(rèn)使用經(jīng)典的刷新和加載-->
<com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srlEnableFooterFollowWhenLoadFinished="true"
        app:srlEnableScrollContentWhenLoaded="true"
        android:layout_below="@+id/toolbar"
        >
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white"
            ></android.support.v7.widget.RecyclerView>
     
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>

java代碼中的使用

SmartRefreshLayout refreshLayout = view.findViewById(R.id.refreshLayout);
       //刷新的監(jiān)聽(tīng)事件
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                //請(qǐng)求數(shù)據(jù)
                refreshLayout.finishRefresh();  //刷新完成 
            }
        });
        //加載的監(jiān)聽(tīng)事件
        refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                  refreshLayout.finishLoadMore();      //加載完成 
                  refreshLayout.finishLoadMoreWithNoMoreData();  //全部加載完成,沒(méi)有數(shù)據(jù)了調(diào)用此方法
            }
        });

常用的用法

refreshLayout.autoRefresh(); //自動(dòng)刷新
refreshLayout.autoLoadMore(); //自動(dòng)加載更多
刷新完成和加載完成分為如下幾種情況
refreshLayout.finishRefresh(); //刷新完成
refreshLayout.finishRefresh(int delayed); //刷新完成, 參數(shù)delayed 設(shè)置延時(shí)
refreshLayout.finishLoadMore(); //加載完成
refreshLayout.finishLoadMore(int delayed); //加載完成, 參數(shù)delayed 設(shè)置延時(shí)
這兩個(gè)方法是在加載失敗時(shí)調(diào)用的
refreshLayout.finishRefresh(false);//結(jié)束刷新(刷新失敗)
refreshLayout.finishLoadMore(false); //結(jié)束加載(加載失斔┦隆)

refreshLayout.finishLoadMoreWithNoMoreData(); //全部加載完成,沒(méi)有數(shù)據(jù)了調(diào)用此方法
隱藏刷新加載的方法
refreshLayout.setEnableLoadMore(false); //隱藏加載,不使用底部加載
refreshLayout.setEnableRefresh(false); //不使用刷新,隱藏刷新

refreshLayout.setNoMoreData(false);//恢復(fù)沒(méi)有更多數(shù)據(jù)的原始狀態(tài),版本 1.0.5

SmartRefreshLayout中的屬性講解

    <attr name="srlDrawableSize" format="dimension"/><!--圖片尺寸-->
    <attr name="srlDrawableArrowSize" format="dimension"/><!--箭頭圖片尺寸-->
    <attr name="srlDrawableProgressSize" format="dimension"/><!--箭頭圖片尺寸-->
    <attr name="srlDrawableMarginRight" format="dimension"/><!--圖片和文字的間距-->
    <attr name="srlTextSizeTitle" format="dimension"/><!--標(biāo)題字體-->
    <attr name="srlTextSizeTime" format="dimension"/><!--時(shí)間字體-->
    <attr name="srlFinishDuration" format="integer"/><!--完成時(shí)停留時(shí)間-->
    <attr name="srlPrimaryColor" format="color"/><!--主要顏色-->
    <attr name="srlAccentColor" format="color"/><!--強(qiáng)調(diào)顏色-->
    <attr name="srlDrawableArrow" format="reference"/><!--箭頭圖片-->
    <attr name="srlDrawableProgress" format="reference"/><!--轉(zhuǎn)動(dòng)圖片-->
    <attr name="srlEnableHorizontalDrag" format="boolean"/><!--支持水平拖動(dòng)-->

    <attr name="srlClassicsSpinnerStyle" format="enum">
        <enum name="Translate" value="0"/><!--平行移動(dòng)-->
        <enum name="Scale" value="1"/><!--拉伸形變-->
        <enum name="FixedBehind" value="2"/><!--固定在背后-->
    </attr>

    <attr name="layout_srlSpinnerStyle" format="enum">
        <enum name="Translate" value="0"/><!--平行移動(dòng)-->
        <enum name="Scale" value="1"/><!--拉伸形變-->
        <enum name="FixedBehind" value="2"/><!--固定在背后-->
        <enum name="FixedFront" value="3"/><!--固定在前面-->
        <enum name="MatchLayout" value="4"/><!--填滿布局-->
    </attr>

 <declare-styleable name="SmartRefreshLayout">
        <attr name="srlPrimaryColor"/>     <!--主題顏色-->
        <attr name="srlAccentColor"/>    <!--強(qiáng)調(diào)顏色-->
        <attr name="srlReboundDuration" format="integer"/>  <!--釋放后回彈動(dòng)畫(huà)時(shí)長(zhǎng)-->
        <attr name="srlHeaderHeight" format="dimension"/> <!--Header的標(biāo)準(zhǔn)高度-->
        <attr name="srlFooterHeight" format="dimension"/> <!--Footer的標(biāo)準(zhǔn)高度-->
        <attr name="srlHeaderInsetStart" format="dimension"/>
        <attr name="srlFooterInsetStart" format="dimension"/>
        <attr name="srlDragRate" format="float"/>     <!--拖動(dòng)高度設(shè)置-->
        <attr name="srlHeaderMaxDragRate" format="float"/> <!--Header最大拖動(dòng)高度/Header標(biāo)準(zhǔn)高度(默認(rèn)2沃斤,要求>=1)-->
        <attr name="srlFooterMaxDragRate" format="float"/> <!--Footer最大拖動(dòng)高度/Footer標(biāo)準(zhǔn)高度(默認(rèn)2,要求>=1)-->
        <attr name="srlHeaderTriggerRate" format="float"/> <!--設(shè)置Header觸發(fā)刷新距離 與 HeaderHieght 的比率(默認(rèn)1)-->
        <attr name="srlFooterTriggerRate" format="float"/> <!--設(shè)置Footer觸發(fā)刷新距離 與 FooterHieght 的比率(默認(rèn)1)-->
        <attr name="srlEnableRefresh" format="boolean"/> <!--是否開(kāi)啟下拉刷新功能(默認(rèn)true)-->
        <attr name="srlEnableLoadMore" format="boolean"/> <!--是否開(kāi)啟加上拉加載功能(默認(rèn)true)-->
        <attr name="srlEnableHeaderTranslationContent" format="boolean"/> <!--拖動(dòng)Header的時(shí)候是否同時(shí)拖動(dòng)內(nèi)容(默認(rèn)true)-->
        <attr name="srlEnableFooterTranslationContent" format="boolean"/> <!--拖動(dòng)Footer的時(shí)候是否同時(shí)拖動(dòng)內(nèi)容(默認(rèn)true)-->
        <attr name="srlHeaderTranslationViewId" format="reference"/>
        <attr name="srlFooterTranslationViewId" format="reference"/>
        <attr name="srlEnablePreviewInEditMode" format="boolean"/> <!--是否在編輯模式時(shí)顯示預(yù)覽效果(默認(rèn)true)-->
        <attr name="srlEnableAutoLoadMore" format="boolean"/>
        <attr name="srlEnableOverScrollBounce" format="boolean"/>
        <attr name="srlEnablePureScrollMode" format="boolean"/>
        <attr name="srlEnableNestedScrolling" format="boolean"/>
        <attr name="srlEnableScrollContentWhenLoaded" format="boolean"/> <!--是否在加載完成之后滾動(dòng)內(nèi)容顯示新數(shù)據(jù)-->
        <attr name="srlEnableScrollContentWhenRefreshed" format="boolean"/> <!--是否在刷新完成之后滾動(dòng)內(nèi)容顯示新數(shù)據(jù)-->
        <attr name="srlEnableLoadMoreWhenContentNotFull" format="boolean"/>
        <attr name="srlEnableFooterFollowWhenLoadFinished" format="boolean"/>
        <attr name="srlEnableClipHeaderWhenFixedBehind" format="boolean"/>
        <attr name="srlEnableClipFooterWhenFixedBehind" format="boolean"/>
        <attr name="srlEnableOverScrollDrag" format="boolean"/>
        <attr name="srlDisableContentWhenRefresh" format="boolean"/> <!--是否在刷新的時(shí)候禁止內(nèi)容的一切手勢(shì)操作(默認(rèn)false)-->
        <attr name="srlDisableContentWhenLoading" format="boolean"/> <!--是否在加載的時(shí)候禁止內(nèi)容的一切手勢(shì)操作(默認(rèn)false)-->
        <attr name="srlFixedHeaderViewId" format="reference"/>
        <attr name="srlFixedFooterViewId" format="reference"/>
    </declare-styleable>



設(shè)置SmartRefreshLayout中自帶酷炫的刷新頭

自定義的header樣式都在refresh-header類(lèi)庫(kù)中

刷新包中的刷新和加載

不會(huì)放動(dòng)圖,實(shí)在抱歉,放個(gè)截屏湊合一下吧,截圖來(lái)自smartREfreshLayout的github上


盒子掉落
 <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srlEnableFooterFollowWhenLoadFinished="true"
        app:srlEnableScrollContentWhenLoaded="true"
        android:layout_below="@+id/toolbar"
        >
       <!--盒子掉落的樣式 -->
        <com.scwang.smartrefresh.header.DropBoxHeader
            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:background="@color/white"
            ></android.support.v7.widget.RecyclerView>
        <!--經(jīng)典的加載樣式-->
        <com.scwang.smartrefresh.layout.footer.ClassicsFooter
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:srlClassicsSpinnerStyle="Translate" />
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>
我喜歡這個(gè)氣球飄的樣式

只是把com.scwang.smartrefresh.header.DropBoxHeader換成了com.scwang.smartrefresh.header.DeliveryHeader

      <!--減少篇幅,其余代碼和上圖代碼塊一只,只是DropBoxHeader換成了DeliveryHeader-->
      <!--氣球的樣式 -->
   <com.scwang.smartrefresh.header.DeliveryHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

蘋(píng)果水滴

 <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        app:srlHeaderMaxDragRate="2.5"
        app:srlPrimaryColor="@android:color/darker_gray"
        app:srlAccentColor="@android:color/white"
        app:srlEnableLoadMore="false">
        <!--srlHeaderMaxDragRate=2.5時(shí)候WaterDropHeader的下拉效果最好-->
         <!--蘋(píng)果水滴的樣式-->
        <com.scwang.smartrefresh.header.WaterDropHeader
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
 </com.scwang.smartrefresh.layout.SmartRefreshLayout
全屏水波
      <!--全屏水波的樣式 -->
   <com.scwang.smartrefresh.header.WaveSwipeHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
金色校園,截圖加了折疊的效果
      <!--金色校園的樣式 -->
   <com.scwang.smartrefresh.header.PhoenixHeader
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

截圖直接看效果吧,雖說(shuō)不是動(dòng)圖,意思一下


TaurusHeader 沖上云霄

BezierCircleHeader 彈出圓圈轉(zhuǎn)悠

貝塞爾雷達(dá)是在刷新包中 com.scwang.smartrefresh.layout.header.BezierRadarHeader


貝塞爾雷達(dá)

FunGameHitBlockHeader 球撞擊方塊掉落,小游戲的模式

FunGameBattleCityHeader 戰(zhàn)爭(zhēng)城市,biubiu,發(fā)射
上面兩個(gè)效果的截圖
StoreHouseHeader 效果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刃宵,一起剝皮案震驚了整個(gè)濱河市衡瓶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌牲证,老刑警劉巖哮针,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡十厢,警方通過(guò)查閱死者的電腦和手機(jī)等太,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛮放,“玉大人缩抡,你說(shuō)我怎么就攤上這事“洌” “怎么了瞻想?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)娩嚼。 經(jīng)常有香客問(wèn)我蘑险,道長(zhǎng),這世上最難降的妖魔是什么岳悟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任佃迄,我火速辦了婚禮,結(jié)果婚禮上竿音,老公的妹妹穿的比我還像新娘和屎。我一直安慰自己,他們只是感情好春瞬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布柴信。 她就那樣靜靜地躺著,像睡著了一般宽气。 火紅的嫁衣襯著肌膚如雪随常。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天萄涯,我揣著相機(jī)與錄音绪氛,去河邊找鬼。 笑死涝影,一個(gè)胖子當(dāng)著我的面吹牛枣察,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燃逻,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼序目,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伯襟?” 一聲冷哼從身側(cè)響起猿涨,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姆怪,沒(méi)想到半個(gè)月后叛赚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體澡绩,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年俺附,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肥卡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昙读,死狀恐怖召调,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛮浑,我是刑警寧澤唠叛,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站沮稚,受9級(jí)特大地震影響艺沼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蕴掏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一障般、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盛杰,春花似錦挽荡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至逗嫡,卻和暖如春青自,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驱证。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工延窜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抹锄。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓逆瑞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親伙单。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呆万,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)车份,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評(píng)論 25 707
  • 用兩張圖告訴你牡彻,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料扫沼? 從這篇文章中你...
    hw1212閱讀 12,730評(píng)論 2 59
  • 不太熟的人出爹,千萬(wàn)別大眾面前開(kāi)玩笑,很無(wú)聊
    低空飛行的皮卡閱讀 114評(píng)論 0 0
  • 夢(mèng)想是每個(gè)人都有的缎除,是成功的基礎(chǔ)严就,沒(méi)有夢(mèng)想就沒(méi)有奮斗的動(dòng)力,所以管理者要學(xué)會(huì)和大家一起描繪夢(mèng)想和愿景器罐,讓...
    孫倩閱讀 574評(píng)論 0 0