SmartRefreshLayout的使用

这是一个可自定义,多功能,多选择,多神奇的下拉刷新,上拉加载的控件
刷新加载的动图效果,请看这里哦>源码地址 https://github.com/scwang90/SmartRefreshLayout

build.gradle 中添加依赖

      或者直接下载源代码导入类库'refresh-layout','refresh-header','refresh-footer'
//1.1.0 API改动过大,老用户升级需谨慎
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'//没有使用特殊Header,可以不加这行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)

//1.0.5 当1.1.0出现问题可以回退到1.0.5.1
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'//没有使用特殊Header,可以不加这行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)
compile 'com.android.support:design:25.3.1'//版本随意(非必须,引用可以解决无法预览问题)

Application中全局设置Header 和 Footer

public class App extends Application {
    //static 代码段可以防止内存泄露
    static {
        //设置全局的Header构建器
        SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
                @Override
                public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                    layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
                    return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
                }
            });
        //设置全局的Footer构建器
        SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
                @Override
                public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
                    //指定为经典Footer,默认是 BallPulseFooter
                    return new ClassicsFooter(context).setDrawableSize(20);
                }
            });
    }
}

\color{red}{注意:全局中设置的Header和Footer的优先级是最低的,xml中设置的样式是中等,java代码中设置的样式等级最高}

在XML布局文件中添加 SmartRefreshLayout

<!--这是基础款,没有添加header,和footer,默认使用经典的刷新和加载-->
<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);
       //刷新的监听事件
        refreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
                //请求数据
                refreshLayout.finishRefresh();  //刷新完成 
            }
        });
        //加载的监听事件
        refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
                  refreshLayout.finishLoadMore();      //加载完成 
                  refreshLayout.finishLoadMoreWithNoMoreData();  //全部加载完成,没有数据了调用此方法
            }
        });

常用的用法

refreshLayout.autoRefresh(); //自动刷新
refreshLayout.autoLoadMore(); //自动加载更多
刷新完成和加载完成分为如下几种情况
refreshLayout.finishRefresh(); //刷新完成
refreshLayout.finishRefresh(int delayed); //刷新完成, 参数delayed 设置延时
refreshLayout.finishLoadMore(); //加载完成
refreshLayout.finishLoadMore(int delayed); //加载完成, 参数delayed 设置延时
这两个方法是在加载失败时调用的
refreshLayout.finishRefresh(false);//结束刷新(刷新失败)
refreshLayout.finishLoadMore(false); //结束加载(加载失败)

refreshLayout.finishLoadMoreWithNoMoreData(); //全部加载完成,没有数据了调用此方法
隐藏刷新加载的方法
refreshLayout.setEnableLoadMore(false); //隐藏加载,不使用底部加载
refreshLayout.setEnableRefresh(false); //不使用刷新,隐藏刷新

refreshLayout.setNoMoreData(false);//恢复没有更多数据的原始状态,版本 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"/><!--标题字体-->
    <attr name="srlTextSizeTime" format="dimension"/><!--时间字体-->
    <attr name="srlFinishDuration" format="integer"/><!--完成时停留时间-->
    <attr name="srlPrimaryColor" format="color"/><!--主要颜色-->
    <attr name="srlAccentColor" format="color"/><!--强调颜色-->
    <attr name="srlDrawableArrow" format="reference"/><!--箭头图片-->
    <attr name="srlDrawableProgress" format="reference"/><!--转动图片-->
    <attr name="srlEnableHorizontalDrag" format="boolean"/><!--支持水平拖动-->

    <attr name="srlClassicsSpinnerStyle" format="enum">
        <enum name="Translate" value="0"/><!--平行移动-->
        <enum name="Scale" value="1"/><!--拉伸形变-->
        <enum name="FixedBehind" value="2"/><!--固定在背后-->
    </attr>

    <attr name="layout_srlSpinnerStyle" format="enum">
        <enum name="Translate" value="0"/><!--平行移动-->
        <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"/>    <!--强调颜色-->
        <attr name="srlReboundDuration" format="integer"/>  <!--释放后回弹动画时长-->
        <attr name="srlHeaderHeight" format="dimension"/> <!--Header的标准高度-->
        <attr name="srlFooterHeight" format="dimension"/> <!--Footer的标准高度-->
        <attr name="srlHeaderInsetStart" format="dimension"/>
        <attr name="srlFooterInsetStart" format="dimension"/>
        <attr name="srlDragRate" format="float"/>     <!--拖动高度设置-->
        <attr name="srlHeaderMaxDragRate" format="float"/> <!--Header最大拖动高度/Header标准高度(默认2,要求>=1)-->
        <attr name="srlFooterMaxDragRate" format="float"/> <!--Footer最大拖动高度/Footer标准高度(默认2,要求>=1)-->
        <attr name="srlHeaderTriggerRate" format="float"/> <!--设置Header触发刷新距离 与 HeaderHieght 的比率(默认1)-->
        <attr name="srlFooterTriggerRate" format="float"/> <!--设置Footer触发刷新距离 与 FooterHieght 的比率(默认1)-->
        <attr name="srlEnableRefresh" format="boolean"/> <!--是否开启下拉刷新功能(默认true)-->
        <attr name="srlEnableLoadMore" format="boolean"/> <!--是否开启加上拉加载功能(默认true)-->
        <attr name="srlEnableHeaderTranslationContent" format="boolean"/> <!--拖动Header的时候是否同时拖动内容(默认true)-->
        <attr name="srlEnableFooterTranslationContent" format="boolean"/> <!--拖动Footer的时候是否同时拖动内容(默认true)-->
        <attr name="srlHeaderTranslationViewId" format="reference"/>
        <attr name="srlFooterTranslationViewId" format="reference"/>
        <attr name="srlEnablePreviewInEditMode" format="boolean"/> <!--是否在编辑模式时显示预览效果(默认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"/> <!--是否在加载完成之后滚动内容显示新数据-->
        <attr name="srlEnableScrollContentWhenRefreshed" format="boolean"/> <!--是否在刷新完成之后滚动内容显示新数据-->
        <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"/> <!--是否在刷新的时候禁止内容的一切手势操作(默认false)-->
        <attr name="srlDisableContentWhenLoading" format="boolean"/> <!--是否在加载的时候禁止内容的一切手势操作(默认false)-->
        <attr name="srlFixedHeaderViewId" format="reference"/>
        <attr name="srlFixedFooterViewId" format="reference"/>
    </declare-styleable>



设置SmartRefreshLayout中自带酷炫的刷新头

自定义的header样式都在refresh-header类库中

刷新包中的刷新和加载

不会放动图,实在抱歉,放个截屏凑合一下吧,截图来自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>
        <!--经典的加载样式-->
        <com.scwang.smartrefresh.layout.footer.ClassicsFooter
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:srlClassicsSpinnerStyle="Translate" />
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>
我喜欢这个气球飘的样式

只是把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"/>

苹果水滴

 <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时候WaterDropHeader的下拉效果最好-->
         <!--苹果水滴的样式-->
        <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"/>

截图直接看效果吧,虽说不是动图,意思一下


TaurusHeader 冲上云霄

BezierCircleHeader 弹出圆圈转悠

贝塞尔雷达是在刷新包中 com.scwang.smartrefresh.layout.header.BezierRadarHeader


贝塞尔雷达

FunGameHitBlockHeader 球撞击方块掉落,小游戏的模式

FunGameBattleCityHeader 战争城市,biubiu,发射
上面两个效果的截图
StoreHouseHeader 效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,480评论 2 59
  • 不太熟的人,千万别大众面前开玩笑,很无聊
    低空飞行的皮卡阅读 105评论 0 0
  • 梦想是每个人都有的,是成功的基础,没有梦想就没有奋斗的动力,所以管理者要学会和大家一起描绘梦想和愿景,让...
    孙倩阅读 545评论 0 0