一个高效的 Android 刷新库,理论上支持所有的视图,比官方的 SwipeRefreshLayout 更强大且使用方便.
本开源库的部分代码来自 android-Ultra-Pull-To-Refresh .
非常感谢他提供的这么棒的开源项目!
下载 Demo.apk
- repositories {
- ...
- maven { url 'https://jitpack.io' }
- }
- dependencies {
- compile 'com.github.dkzwm:SmoothRefreshLayout:1.3.2'
- }
- <?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>
- 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);
名称 | 类型 | 描述 |
---|---|---|
sr_mode | enum | 模式设置(默认:) |
sr_content | integer | 指定内容视图的资源 ID |
sr_resistance | float | 刷新视图的移动阻尼(默认:) |
sr_resistance_of_pull_up | float | Footer 视图的移动阻尼(默认:) |
sr_resistance_of_pull_down | float | Header 视图的移动阻尼(默认:) |
sr_ratio_of_refresh_height_to_refresh | float | 触发刷新时位置占刷新视图的高度比(默认:) |
sr_ratio_of_header_height_to_refresh | float | 触发刷新时位置占 Header 视图的高度比(默认:) |
sr_ratio_of_footer_height_to_refresh | float | 触发加载更多时位置占 Footer 视图的高度比(默认:) |
sr_offset_ratio_to_keep_refresh_while_Loading | float | 刷新中保持视图位置占刷新视图的高度比(默认:), 该属性的值必须小于等于触发刷新高度比才会有效果 |
sr_offset_ratio_to_keep_header_while_Loading | float | 刷新中保持视图位置占 Header 视图的高度比(默认:), 该属性的值必须小于等于触发刷新高度比才会有效果 |
sr_offset_ratio_to_keep_footer_while_Loading | float | 刷新中保持视图位置占 Footer 视图的高度比(默认:), 该属性的值必须小于等于触发刷新高度比才会有效果 |
sr_can_move_the_max_ratio_of_refresh_height | float | 最大移动距离占刷新视图的高度比(默认:,表示不会触发) |
sr_can_move_the_max_ratio_of_header_height | float | 最大移动距离占 Header 视图的高度比(默认:,表示不会触发) |
sr_can_move_the_max_ratio_of_footer_height | float | 最大移动距离占 Footer 视图的高度比(默认:,表示不会触发) |
sr_duration_to_close_of_refresh | integer | 指定收缩刷新视图到起始位置的时长(默认:) |
sr_duration_to_close_of_header | integer | 指定收缩 Header 视图到起始位置的时长(默认:) |
sr_duration_to_close_of_footer | integer | 指定收缩 Footer 视图到起始位置的时长(默认:) |
sr_duration_of_back_to_refresh_height | integer | 收缩刷新视图到触发刷新位置的时长(默认:) |
sr_duration_of_back_to_header_height | integer | 收缩刷新视图到触发 Header 刷新位置的时长(默认:) |
sr_duration_of_back_to_footer_height | integer | 收缩刷新视图到触发 Footer 刷新位置的时长(默认:) |
sr_enable_pin_content | boolean | 固定内容视图(默认:) |
sr_enable_keep_refresh_view | boolean | 刷新中保持视图停留在所设置的应该停留的位置(默认:) |
sr_enable_pull_to_refresh | boolean | 拉动刷新, 下拉或者上拉到触发刷新位置即立即触发刷新(默认:) |
sr_enable_over_scroll | boolean | 越界回弹(默认:), 使用者需要自己设置内容视图的 为 才能达到最优效果 |
名称 | 类型 | 描述 |
---|---|---|
sr_layout_gravity | flag | 指定其它被包裹视图的对齐属性 (非 content view、非 refresh view) |
名称 | 参数 | 描述 |
---|---|---|
setHeaderView | IRefreshView | 配置头部视图 |
setFooterView | IRefreshView | 配置尾部视图 |
setContentView | View | 配置内容视图 |
setEnableNextPtrAtOnce | boolean | 刷新完成即可再次刷新 |
setResistance | float | 刷新视图的移动阻尼(默认:) |
setResistanceOfPullUp | float | Footer 视图的移动阻尼(默认:) |
setResistanceOfPullDown | float | Header 视图的移动阻尼(默认:) |
setRatioOfRefreshViewHeightToRefresh | float | 触发刷新时位置占刷新视图的高度比(默认:) |
setRatioOfHeaderHeightToRefresh | float | 触发刷新时位置占 Header 视图的高度比(默认:) |
setRatioOfFooterHeightToRefresh | float | 触发加载更多时位置占 Footer 视图的高度比(默认:) |
setOffsetRatioToKeepRefreshViewWhileLoading | float | 刷新中保持视图位置占刷新视图的高度比(默认:), 该属性的值必须小于等于触发刷新高度比才会有效果 |
setOffsetRatioToKeepHeaderWhileLoading | float | 刷新中保持视图位置占 Header 视图的高度比(默认:), 该属性的值必须小于等于触发刷新高度比才会有效果 |
setOffsetRatioToKeepFooterWhileLoading | float | 刷新中保持视图位置占 Footer 视图的高度比(默认:), 该属性的值必须小于等于触发刷新高度比才会有效果 |
setCanMoveTheMaxRatioOfRefreshViewHeight | float | 最大移动距离占刷新视图的高度比(默认:,表示不会触发) |
setCanMoveTheMaxRatioOfHeaderHeight | float | 最大移动距离占 Header 视图的高度比(默认:,表示不会触发) |
setCanMoveTheMaxRatioOfFooterHeight | float | 最大移动距离占 Footer 视图的高度比(默认:,表示不会触发) |
setDurationToClose | int | 指定收缩刷新视图到起始位置的时长(默认:) |
setDurationToCloseHeader | int | 指定收缩 Header 视图到起始位置的时长(默认:) |
setDurationToCloseFooter | int | 指定收缩 Footer 视图到起始位置的时长(默认:) |
setDurationOfBackToRefreshViewHeight | integer | 收缩刷新视图到触发刷新位置的时长(默认:) |
setDurationOfBackToHeaderHeight | integer | 收缩刷新视图到触发 Header 刷新位置的时长(默认:) |
setDurationOfBackToFooterHeight | integer | 收缩刷新视图到触发 Footer 刷新位置的时长(默认:) |
setEnablePinContentView | boolean | 固定内容视图(默认:) |
setEnabledPullToRefresh | boolean | 拉动刷新, 下拉或者上拉到触发刷新位置即立即触发刷新(默认:) |
setEnableOverScroll | boolean | 越界回弹(默认:), 使用者需要自己设置内容视图的 为 才能达到最优效果 |
setEnabledInterceptEventWhileLoading | boolean | 刷新中拦截不响应触摸操作(默认:) |
setEnableHeaderDrawerStyle | boolean | Header 抽屉样式, 即 Header 视图在内容视图下面(默认:) |
setEnableFooterDrawerStyle | boolean | Footer 抽屉样式, 即 Footer 视图在内容视图下面(默认:) |
setDisablePerformRefresh | boolean | 关闭触发 Header 刷新(默认:) |
setDisablePerformLoadMore | boolean | 关闭触发 Footer 刷新(默认:) |
setDisableRefresh | boolean | 禁用 Header 刷新(默认:) |
setDisableLoadMore | boolean | 禁用 Footer 刷新(默认:) |
setEnableKeepRefreshView | boolean | 刷新中保持视图停留在所设置的应该停留的位置(默认:) |
setEnableWhenScrollingToBottomToPerformLoadMore | boolean | 到底部自动加载(默认:) |
setEnablePinRefreshViewWhileLoading | boolean | 固定刷新视图在所设置的应该停留的位置,并且不响应移动,即 Material 样式(默认:), 设置前提是开启了 和 2 个选项,否则运行时会抛出异常 |
名称 | 参数 | 描述 |
---|---|---|
setOnRefreshListener | T extends OnRefreshListener | 刷新事件监听回调 |
addOnUIPositionChangedListener | OnUIPositionChangedListener | 添加视图位置变化的监听回调 |
removeOnUIPositionChangedListener | OnUIPositionChangedListener | 移除视图位置变化的监听回调 |
setOnLoadMoreScrollCallback | OnLoadMoreScrollCallback | Footer 完成刷新后进行平滑滚动的回调 |
setOnChildScrollUpCallback | OnChildScrollUpCallback | 检查内容视图是否在顶部的回调(SmoothRefreshLayout 内部 方法) |
setOnChildScrollDownCallback | OnChildScrollDownCallback | 检查内容视图是否在底部的回调(SmoothRefreshLayout 内部 方法) |
setOnHookHeaderRefreshCompleteCallback | OnHookUIRefreshCompleteCallBack | 设置 Header 刷新完成的 Hook 回调,可实现延迟完成刷新 |
setOnHookFooterRefreshCompleteCallback | OnHookUIRefreshCompleteCallBack | 设置 Footer 刷新完成的 Hook 回调,可实现延迟完成刷新 |
名称 | 参数 | 描述 |
---|---|---|
debug | boolean | Debug 开关 |
refreshComplete | 无参 | 刷新完成, 且设置最后一次刷新状态为成功 |
refreshComplete | boolean | 刷新完成, 参数: 设置最后一次刷新是否刷新成功 |
setLoadingMinTime | long | 设置开始刷新到结束刷新的最小时间差 (默认:), 参数: 时间差 |
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 即可 |
- MIT License
- Copyright(c) 2017 dkzwm
- Permission is hereby granted,
- free of charge,
- to any person obtaining a copy of this software and associated documentation files(the "Software"),
- to deal in the Software without restriction,
- including without limitation the rights to use,
- copy,
- modify,
- merge,
- publish,
- distribute,
- sublicense,
- and / or sell copies of the Software,
- and to permit persons to whom the Software is furnished to do so,
- subject to the following conditions:
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS",
- WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY,
- 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 THE SOFTWARE.
来源: http://www.tuicool.com/articles/7fuEzqr