一个高效、稳定、强大的Android刷新库SmoothRefreshLayout

项目地址
https://github.com/dkzwm/SmoothRefreshLayout
特性:
理论上支持所有的视图,且可根据具体需求高效适配.
支持5种模式,NONE(做为FrameLayout使用)、REFRESH(头部刷新)、LOAD_MORE(底部刷新)、BOTH(头部刷新和底部刷新)、OVER_SCROLL(越界回弹).
支持嵌套滑动,完整实现了NestedScrollingChild,NestedScrollingParent 接口,玩转CoordinatorLayout.
直接继承自ViewGroup,拥有卓越的性能,支持类FameLayout的特性(Gravity、Margin).
支持自动刷新、自动上拉加载、到底自动加载更多(不推荐,建议使用Adapter实现).
支持越界回弹.
支持抽屉效果.
支持二级刷新事件(TwoLevelSmoothRefreshLayout).
支持ListView,RecyclerView加载更多的平滑滚动.
支持内容视图的Margin,PS:滚动中没有了Margin效果?SmoothRefreshLayout不存在这种问题.
丰富的回调接口和调试信息,可利用现有Api实现丰富的效果.

测试QQ浏览器样式

测试QQ活动样式

测试2级刷新

包含FrameLayout

包含TextView

包含ListView

包含GridView

包含RecyclerView

包含ViewPager

包含WebView

CoordinatorLayout

越界回弹模式

测试嵌套滑动

使用

Gradle

repositories {  
    ...
    maven { url 'https://jitpack.io' }  
}

dependencies {  
    compile 'com.github.dkzwm:SmoothRefreshLayout:1.3.2'
}

在Xml中配置

<?xml version="1.0" encoding="utf-8"?>
<me.dkzwm.smoothrefreshlayout.SmoothRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/smoothRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/textView_"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</me.dkzwm.smoothrefreshlayout.SmoothRefreshLayout>

Java代码配置

SmoothRefreshLayout refreshLayout = (SmoothRefreshLayout)findViewById(R.id.smoothRefreshLayout);
refreshLayout.setMode(SmoothRefreshLayout.MODE_BOTH);
refreshLayout.setHeaderView(new ClassicHeader(this));
refreshLayout.setOnRefreshListener(new RefreshingListenerAdapter() {
    @Override
    public void onRefreshBegin(boolean isRefresh) {
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                refreshLayout.refreshComplete();
            }
        }, 4000);
    }
});

自定义刷新视图
接口定义

public interface IRefreshView {
    byte TYPE_HEADER = 0;
    byte TYPE_FOOTER = 1;

    /**
     * 返回是头部视图还是尾部视图
     */
    int getType();

    /**
     * 一般情况都是View实现本接口,所以返回this;
     */
    View getView();

    /**
     * 手指离开屏幕
     */
    void onFingerUp(SmoothRefreshLayout layout, IIndicator indicator);

    /**
     * 重置视图
     */
    void onReset(SmoothRefreshLayout layout);

    /**
     * 重新配置视图,准备刷新
     */
    void onRefreshPrepare(SmoothRefreshLayout layout);

    /**
     * 开始刷新
     */
    void onRefreshBegin(SmoothRefreshLayout layout, IIndicator indicator);

    /**
     * 刷新完成
     */
    void onRefreshComplete(SmoothRefreshLayout layout);

    /**
     * 当头部或者尾部视图发生位置变化
     */
    void onRefreshPositionChanged(SmoothRefreshLayout layout, byte status, IIndicator indicator);

}

添加自定义刷新视图
代码添加

setHeaderView(@NonNull IRefreshView header);
setFooterView(@NonNull IRefreshView footer);

Xml属性
SmoothRefreshLayout 自身配置

名称 类型 描述
sr_mode enum 模式设置(默认:none)
sr_content integer 指定内容视图的资源ID
sr_resistance float 刷新视图的移动阻尼(默认:1.65f)
sr_resistance_of_pull_up float Footer视图的移动阻尼(默认:1.65f)
sr_resistance_of_pull_down float Header视图的移动阻尼(默认:1.65f)
sr_ratio_of_refresh_height_to_refresh float 触发刷新时位置占刷新视图的高度比(默认:1.1f)
sr_ratio_of_header_height_to_refresh float 触发刷新时位置占Header视图的高度比(默认:1.1f)
sr_ratio_of_footer_height_to_refresh float 触发加载更多时位置占Footer视图的高度比(默认:1.1f)
sr_offset_ratio_to_keep_refresh_while_Loading float 刷新中保持视图位置占刷新视图的高度比(默认:1f),该属性的值必须小于等于触发刷新高度比才会有效果
sr_offset_ratio_to_keep_header_while_Loading float 刷新中保持视图位置占Header视图的高度比(默认:1f),该属性的值必须小于等于触发刷新高度比才会有效果
sr_offset_ratio_to_keep_footer_while_Loading float 刷新中保持视图位置占Footer视图的高度比(默认:1f),该属性的值必须小于等于触发刷新高度比才会有效果
sr_can_move_the_max_ratio_of_refresh_height float 最大移动距离占刷新视图的高度比(默认:0f,表示不会触发)
sr_can_move_the_max_ratio_of_header_height float 最大移动距离占Header视图的高度比(默认:0f,表示不会触发)
sr_can_move_the_max_ratio_of_footer_height float 最大移动距离占Footer视图的高度比(默认:0f,表示不会触发)
sr_duration_to_close_of_refresh integer 指定收缩刷新视图到起始位置的时长(默认:500)
sr_duration_to_close_of_header integer 指定收缩Header视图到起始位置的时长(默认:500)
sr_duration_to_close_of_footer integer 指定收缩Footer视图到起始位置的时长(默认:500)
sr_duration_of_back_to_refresh_height integer 收缩刷新视图到触发刷新位置的时长(默认:200)
sr_duration_of_back_to_header_height integer 收缩刷新视图到触发Header刷新位置的时长(默认:200)
sr_duration_of_back_to_footer_height integer 收缩刷新视图到触发Footer刷新位置的时长(默认:200)
sr_enable_pin_content boolean 固定内容视图(默认:false)
sr_enable_keep_refresh_view boolean 刷新中保持视图停留在所设置的应该停留的位置(默认:true)
sr_enable_pull_to_refresh boolean 拉动刷新,下拉或者上拉到触发刷新位置即立即触发刷新(默认:false)
sr_enable_over_scroll boolean 越界回弹(默认:true),使用者需要自己设置内容视图的 overScrollMode 为 never才能达到最优效果

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,510评论 18 139
  • 一、Android开发初体验 二、Android与MVC设计模式模型对象存储着应用的数据和业务逻辑。模型类通常用来...
    为梦想战斗阅读 873评论 0 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,132评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,366评论 2 44
  • 在十年之前,我身体素质较差,兼带有一些忧郁,喜欢看一些感伤的影剧,听一些忧郁的老歌,时不时会流泪;喜欢下雨天...
    扒哥阅读 228评论 0 0