android高度刷新,一个高效、稳定、强大的Android刷新库

原标题:一个高效、稳定、强大的Android刷新库

SmoothRefreshLayout

项目地址

SmoothRefreshLayout

English| 中文

一个高效的Android刷新库,理论上支持所有的视图,比官方的SwipeRefreshLayout更强大且使用方便.

本开源库的部分代码来自android-Ultra-Pull-To-Refresh.

非常感谢他提供的这么棒的开源项目!

特性:

理论上支持所有的视图,且可根据具体需求高效适配.

支持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实现丰富的效果.

演示程序

下载 Demo.apk

快照

测试QQ浏览器样式

fb7fe8cb7d8982265c2e300d6753eb35.png

测试QQ活动样式

a1c6f6fe8d3ba2e60ea4daa03a35e883.png

测试2级刷新

包含FrameLayout

04f8df41489400d453a91076f41db5d1.png

包含TextView

881d3dcbe5761ecba5f2cc7229dfa923.png

包含ListView

60095c251f29a2364a790805e5b1a0a7.png

包含GridView

包含RecyclerView

37e0c6dd5f17bf0621d5f961bbb82545.png

包含ViewPager

4dbca8d40496e120d5953efc86b2c861.png

包含WebView

fa94e8f319c6de00cb9284200167c31e.png

CoordinatorLayout

越界回弹模式

e4d76d98403276c06ab165657a471c5f.png

测试嵌套滑动

71e5657b8632de437b1290bf18051cee.png

使用Gradle repositories { ... maven { url 'https://jitpack.io' } }dependencies { compile 'com.github.dkzwm:SmoothRefreshLayout:1.3.2'} 在Xml中配置 <?xml version="1.0" encoding="utf-8"?> 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会根据添加的View是否是实现了IRefreshView接口进行判断

代码添加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才能达到最优效果SmoothRefreshLayout包裹内部其他View支持配置

名称

类型

描述

sr_layout_gravity

flag

指定其它被包裹视图的对齐属性(非content view、非refresh view)Java属性设置方法

名称

参数

描述

setHeaderView

IRefreshView

配置头部视图

setFooterView

IRefreshView

配置尾部视图

setContentView

View

配置内容视图

setEnableNextPtrAtOnce

boolean

刷新完成即可再次刷新

setResistance

float

刷新视图的移动阻尼(默认:1.65f)

setResistanceOfPullUp

float

Footer视图的移动阻尼(默认:1.65f)

setResistanceOfPullDown

float

Header视图的移动阻尼(默认:1.65f)

setRatioOfRefreshViewHeightToRefresh

float

触发刷新时位置占刷新视图的高度比(默认:1.1f)

setRatioOfHeaderHeightToRefresh

float

触发刷新时位置占Header视图的高度比(默认:1.1f)

setRatioOfFooterHeightToRefresh

float

触发加载更多时位置占Footer视图的高度比(默认:1.1f)

setOffsetRatioToKeepRefreshViewWhileLoading

float

刷新中保持视图位置占刷新视图的高度比(默认:1f),该属性的值必须小于等于触发刷新高度比才会有效果

setOffsetRatioToKeepHeaderWhileLoading

float

刷新中保持视图位置占Header视图的高度比(默认:1f),该属性的值必须小于等于触发刷新高度比才会有效果

setOffsetRatioToKeepFooterWhileLoading

float

刷新中保持视图位置占Footer视图的高度比(默认:1f),该属性的值必须小于等于触发刷新高度比才会有效果

setCanMoveTheMaxRatioOfRefreshViewHeight

float

最大移动距离占刷新视图的高度比(默认:0f,表示不会触发)

setCanMoveTheMaxRatioOfHeaderHeight

float

最大移动距离占Header视图的高度比(默认:0f,表示不会触发)

setCanMoveTheMaxRatioOfFooterHeight

float

最大移动距离占Footer视图的高度比(默认:0f,表示不会触发)

setDurationToClose

int

指定收缩刷新视图到起始位置的时长(默认:500)

setDurationToCloseHeader

int

指定收缩Header视图到起始位置的时长(默认:500)

setDurationToCloseFooter

int

指定收缩Footer视图到起始位置的时长(默认:500)

setDurationOfBackToRefreshViewHeight

integer

收缩刷新视图到触发刷新位置的时长(默认:200)

setDurationOfBackToHeaderHeight

integer

收缩刷新视图到触发Header刷新位置的时长(默认:200)

setDurationOfBackToFooterHeight

integer

收缩刷新视图到触发Footer刷新位置的时长(默认:200)

setEnablePinContentView

boolean

固定内容视图(默认:false)

setEnabledPullToRefresh

boolean

拉动刷新,下拉或者上拉到触发刷新位置即立即触发刷新(默认:false)

setEnableOverScroll

boolean

越界回弹(默认:true),使用者需要自己设置内容视图的 overScrollMode 为 never 才能达到最优效果

setEnabledInterceptEventWhileLoading

boolean

刷新中拦截不响应触摸操作(默认:false)

setEnableHeaderDrawerStyle

boolean

Header抽屉样式,即Header视图在内容视图下面(默认:false)

setEnableFooterDrawerStyle

boolean

Footer抽屉样式,即Footer视图在内容视图下面(默认:false)

setDisablePerformRefresh

boolean

关闭触发Header刷新(默认:false)

setDisablePerformLoadMore

boolean

关闭触发Footer刷新(默认:false)

setDisableRefresh

boolean

禁用Header刷新(默认:false)

setDisableLoadMore

boolean

禁用Footer刷新(默认:false)

setEnableKeepRefreshView

boolean

刷新中保持视图停留在所设置的应该停留的位置(默认:true)

setEnableWhenScrollingToBottomToPerformLoadMore

boolean

到底部自动加载(默认:false)

setEnablePinRefreshViewWhileLoading

boolean

固定刷新视图在所设置的应该停留的位置,并且不响应移动,即Material样式(默认:false),设置前提是开启了setEnablePinContentView和setEnableKeepRefreshView2个选项,否则运行时会抛出异常回调

名称

参数

描述

setOnRefreshListener

T extends OnRefreshListener

刷新事件监听回调

addOnUIPositionChangedListener

OnUIPositionChangedListener

添加视图位置变化的监听回调

removeOnUIPositionChangedListener

OnUIPositionChangedListener

移除视图位置变化的监听回调

setMoreScrollCallback

MoreScrollCallback

Footer完成刷新后进行平滑滚动的回调

setOnChildScrollUpCallback

OnChildScrollUpCallback

检查内容视图是否在顶部的回调(SmoothRefreshLayout内部canChildScrollUp()方法)

setOnChildScrollDownCallback

OnChildScrollDownCallback

检查内容视图是否在底部的回调(SmoothRefreshLayout内部canChildScrollDown()方法)

setOnHookHeaderRefreshCompleteCallback

OnHookUIRefreshCompleteCallBack

设置Header刷新完成的Hook回调,可实现延迟完成刷新

setOnHookFooterRefreshCompleteCallback

OnHookUIRefreshCompleteCallBack

设置Footer刷新完成的Hook回调,可实现延迟完成刷新其它

名称

参数

描述

debug

boolean

Debug开关

refreshComplete

无参

刷新完成,且设置最后一次刷新状态为成功

refreshComplete

boolean

刷新完成,参数:设置最后一次刷新是否刷新成功

setLoadingMinTime

long

设置开始刷新到结束刷新的最小时间差(默认:500),参数:时间差

autoRefresh

无参

自动触发Header刷新,立即触发刷新事件并滚动到触发Header刷新位置

autoRefresh

boolean

自动触发Header刷新,参数:是否立即触发刷新事件,会滚动到触发Header刷新位置

autoRefresh

boolean,boolean

自动触发Header刷新,参数1:是否立即触发刷新事件,参数2:是否滚动到触发Header刷新位置

autoLoadMore

无参

自动触发Footer刷新,立即触发刷新事件并滚动到触发Footer刷新位置

autoLoadMore

boolean

自动触发Footer刷新,参数:是否立即触发刷新事件,会滚动到触发Footer刷新位置

autoLoadMore

boolean,boolean

自动触发Footer刷新,参数1:是否立即触发刷新事件,参数2:是否滚动到触发Footer刷新位置

setLoadMoreScrollTargetView

View

设置Footer移动时,响应移动事件的内容视图,例如在SmoothRefreshLayout中有一个CoordinatorLayout,CoordinatorLayout中有AppbarLayout、RecyclerView等,加载更多时希望被移动的视图为RecyclerView而不是CoordinatorLayout,那么设置RecyclerView为TargetView即可

Thanks

liaohuqiu android-Ultra-Pull-To-Refresh

pnikosis material-progress

LicenseMIT LicenseCopyright (c) 2017 dkzwmPermission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THESOFTWARE.返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值