一个高效、稳定、强大的Android刷新库
来源:互联网 发布:fft算法 c语言 编辑:程序博客网 时间:2024/05/17 04:00
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浏览器样式
- 测试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会根据添加的View是否是实现了IRefreshView接口进行判断
Xml属性
SmoothRefreshLayout 自身配置
none
)sr_contentinteger指定内容视图的资源IDsr_resistancefloat刷新视图的移动阻尼(默认:1.65f
)sr_resistance_of_pull_upfloatFooter视图的移动阻尼(默认:1.65f
)sr_resistance_of_pull_downfloatHeader视图的移动阻尼(默认:1.65f
)sr_ratio_of_refresh_height_to_refreshfloat触发刷新时位置占刷新视图的高度比(默认:1.1f
)sr_ratio_of_header_height_to_refreshfloat触发刷新时位置占Header视图的高度比(默认:1.1f
)sr_ratio_of_footer_height_to_refreshfloat触发加载更多时位置占Footer视图的高度比(默认:1.1f
)sr_offset_ratio_to_keep_refresh_while_Loadingfloat刷新中保持视图位置占刷新视图的高度比(默认:1f
),该属性的值必须小于等于触发刷新高度比才会有效果sr_offset_ratio_to_keep_header_while_Loadingfloat刷新中保持视图位置占Header视图的高度比(默认:1f
),该属性的值必须小于等于触发刷新高度比才会有效果sr_offset_ratio_to_keep_footer_while_Loadingfloat刷新中保持视图位置占Footer视图的高度比(默认:1f
),该属性的值必须小于等于触发刷新高度比才会有效果sr_can_move_the_max_ratio_of_refresh_heightfloat最大移动距离占刷新视图的高度比(默认:0f
,表示不会触发)sr_can_move_the_max_ratio_of_header_heightfloat最大移动距离占Header视图的高度比(默认:0f
,表示不会触发)sr_can_move_the_max_ratio_of_footer_heightfloat最大移动距离占Footer视图的高度比(默认:0f
,表示不会触发)sr_duration_to_close_of_refreshinteger指定收缩刷新视图到起始位置的时长(默认:500
)sr_duration_to_close_of_headerinteger指定收缩Header视图到起始位置的时长(默认:500
)sr_duration_to_close_of_footerinteger指定收缩Footer视图到起始位置的时长(默认:500
)sr_duration_of_back_to_refresh_heightinteger收缩刷新视图到触发刷新位置的时长(默认:200
)sr_duration_of_back_to_header_heightinteger收缩刷新视图到触发Header刷新位置的时长(默认:200
)sr_duration_of_back_to_footer_heightinteger收缩刷新视图到触发Footer刷新位置的时长(默认:200
)sr_enable_pin_contentboolean固定内容视图(默认:false
)sr_enable_keep_refresh_viewboolean刷新中保持视图停留在所设置的应该停留的位置(默认:true
)sr_enable_pull_to_refreshboolean拉动刷新,下拉或者上拉到触发刷新位置即立即触发刷新(默认:false
)sr_enable_over_scrollboolean越界回弹(默认:true
),使用者需要自己设置内容视图的 overScrollMode
为 never
才能达到最优效果SmoothRefreshLayout包裹内部其他View支持配置
Java属性设置方法
1.65f
)setResistanceOfPullUpfloatFooter视图的移动阻尼(默认:1.65f
)setResistanceOfPullDownfloatHeader视图的移动阻尼(默认:1.65f
)setRatioOfRefreshViewHeightToRefreshfloat触发刷新时位置占刷新视图的高度比(默认:1.1f
)setRatioOfHeaderHeightToRefreshfloat触发刷新时位置占Header视图的高度比(默认:1.1f
)setRatioOfFooterHeightToRefreshfloat触发加载更多时位置占Footer视图的高度比(默认:1.1f
)setOffsetRatioToKeepRefreshViewWhileLoadingfloat刷新中保持视图位置占刷新视图的高度比(默认:1f
),该属性的值必须小于等于触发刷新高度比才会有效果setOffsetRatioToKeepHeaderWhileLoadingfloat刷新中保持视图位置占Header视图的高度比(默认:1f
),该属性的值必须小于等于触发刷新高度比才会有效果setOffsetRatioToKeepFooterWhileLoadingfloat刷新中保持视图位置占Footer视图的高度比(默认:1f
),该属性的值必须小于等于触发刷新高度比才会有效果setCanMoveTheMaxRatioOfRefreshViewHeightfloat最大移动距离占刷新视图的高度比(默认:0f
,表示不会触发)setCanMoveTheMaxRatioOfHeaderHeightfloat最大移动距离占Header视图的高度比(默认:0f
,表示不会触发)setCanMoveTheMaxRatioOfFooterHeightfloat最大移动距离占Footer视图的高度比(默认:0f
,表示不会触发)setDurationToCloseint指定收缩刷新视图到起始位置的时长(默认:500
)setDurationToCloseHeaderint指定收缩Header视图到起始位置的时长(默认:500
)setDurationToCloseFooterint指定收缩Footer视图到起始位置的时长(默认:500
)setDurationOfBackToRefreshViewHeightinteger收缩刷新视图到触发刷新位置的时长(默认:200
)setDurationOfBackToHeaderHeightinteger收缩刷新视图到触发Header刷新位置的时长(默认:200
)setDurationOfBackToFooterHeightinteger收缩刷新视图到触发Footer刷新位置的时长(默认:200
)setEnablePinContentViewboolean固定内容视图(默认:false
)setEnabledPullToRefreshboolean拉动刷新,下拉或者上拉到触发刷新位置即立即触发刷新(默认:false
)setEnableOverScrollboolean越界回弹(默认:true
),使用者需要自己设置内容视图的 overScrollMode
为 never
才能达到最优效果setEnabledInterceptEventWhileLoadingboolean刷新中拦截不响应触摸操作(默认:false
)setEnableHeaderDrawerStylebooleanHeader抽屉样式,即Header视图在内容视图下面(默认:false
)setEnableFooterDrawerStylebooleanFooter抽屉样式,即Footer视图在内容视图下面(默认:false
)setDisablePerformRefreshboolean关闭触发Header刷新(默认:false
)setDisablePerformLoadMoreboolean关闭触发Footer刷新(默认:false
)setDisableRefreshboolean禁用Header刷新(默认:false
)setDisableLoadMoreboolean禁用Footer刷新(默认:false
)setEnableKeepRefreshViewboolean刷新中保持视图停留在所设置的应该停留的位置(默认:true
)setEnableWhenScrollingToBottomToPerformLoadMoreboolean到底部自动加载(默认:false
)setEnablePinRefreshViewWhileLoadingboolean固定刷新视图在所设置的应该停留的位置,并且不响应移动,即Material样式(默认:false
),设置前提是开启了setEnablePinContentView
和setEnableKeepRefreshView
2个选项,否则运行时会抛出异常回调
canChildScrollUp()
方法)setOnChildScrollDownCallbackOnChildScrollDownCallback检查内容视图是否在底部的回调(SmoothRefreshLayout内部canChildScrollDown()
方法)setOnHookHeaderRefreshCompleteCallbackOnHookUIRefreshCompleteCallBack设置Header刷新完成的Hook回调,可实现延迟完成刷新setOnHookFooterRefreshCompleteCallbackOnHookUIRefreshCompleteCallBack设置Footer刷新完成的Hook回调,可实现延迟完成刷新其它
500
),参数:时间差autoRefresh无参自动触发Header刷新,立即触发刷新事件并滚动到触发Header刷新位置autoRefreshboolean自动触发Header刷新,参数:是否立即触发刷新事件,会滚动到触发Header刷新位置autoRefreshboolean,boolean自动触发Header刷新,参数1:是否立即触发刷新事件,参数2:是否滚动到触发Header刷新位置autoLoadMore无参自动触发Footer刷新,立即触发刷新事件并滚动到触发Footer刷新位置autoLoadMoreboolean自动触发Footer刷新,参数:是否立即触发刷新事件,会滚动到触发Footer刷新位置autoLoadMoreboolean,boolean自动触发Footer刷新,参数1:是否立即触发刷新事件,参数2:是否滚动到触发Footer刷新位置setLoadMoreScrollTargetViewView设置Footer移动时,响应移动事件的内容视图,例如在SmoothRefreshLayout中有一个CoordinatorLayout,CoordinatorLayout中有AppbarLayout、RecyclerView等,加载更多时希望被移动的视图为RecyclerView而不是CoordinatorLayout,那么设置RecyclerView为TargetView即可Thanks
- liaohuqiu android-Ultra-Pull-To-Refresh
- pnikosis material-progress
License
MIT 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.
阅读全文
0 0
- 一个高效、稳定、强大的Android刷新库
- 强大高效的jackson库
- 一个很强大的下拉刷新控件
- 一个强大的下拉刷新框架
- 如何部署一个稳定高效可扩展的前端
- Android几种强大的下拉刷新库
- Android几种强大的下拉刷新库
- Android几种强大的下拉刷新库
- 一个强大的下拉刷新框架android-Ultra-Pull-To-Refresh
- Android 下拉刷新,非常强大的下拉刷新功能
- Twitter的Chris Fry教你如何构建一个稳定而高效的工程团队
- Apache 与Tomcat 服务器联合搭建一个稳定,动态,高效的web服务器
- 如何构建一个安全,稳定,高效的互联网平台体系架构
- 一个稳定的数
- 强大而高效的Profiler
- 一个强大的Android模拟器Genymotion
- 一个强大的拉动刷新开源项目,支持各种控件下拉刷新
- 搭建高效、可靠、稳定的WEB服务器
- Java泛型编程与多态、重载的同与不同
- 2.9 linux存储管理-页面的换入
- DX9鼠标拾取网格轨迹
- Java用socket实现简单的一对一通信
- 浅谈可重入函数与不可重入函数
- 一个高效、稳定、强大的Android刷新库
- 记一次阿里面试
- 关于选择脚本的问题
- 生成函数 应用
- Java Colections 集合类 —— List、ArrayList、Set(HashSet)
- leetcode 417. Pacific Atlantic Water Flow
- 通知与协议代理的区别
- 用PLSQL给自己发一份邮件
- Big Data (2)