SmoothRefreshLayout
English | 中文
一個(gè)高效的Android刷新庫,理論上支持所有的視圖,比官方的SwipeRefreshLayout更強(qiáng)大且使用方便.
本開源庫的部分代碼來自android-Ultra-Pull-To-Refresh.
非常感謝他提供的這么棒的開源項(xiàng)目!
特性:
- 理論上支持所有的視圖,且可根據(jù)具體需求高效適配.
- 支持多點(diǎn)觸摸.
- 支持嵌套滑動(dòng),完整實(shí)現(xiàn)了NestedScrollingChild,NestedScrollingParent 接口,玩轉(zhuǎn)CoordinatorLayout.
- 直接繼承自ViewGroup,擁有卓越的性能,支持類FameLayout的特性(Gravity、Margin).
- 支持自動(dòng)刷新、自動(dòng)上拉加載、到底自動(dòng)加載更多(不推薦,建議使用Adapter實(shí)現(xiàn),可自定義到底判斷邏輯回調(diào)實(shí)現(xiàn)預(yù)加載更多).
- 支持越界回彈.
- 支持刷新視圖自定樣式:STYLE_DEFAULT(默認(rèn)不改變大小)、STYLE_SCALE(動(dòng)態(tài)改變大小,一直會(huì)重測量并布局,所以性能會(huì)有損失)、STYLE_PIN(不會(huì)改變視圖大小,固定在頂部或者底部)、STYLE_FOLLOW_SCALE(先縱向跟隨移動(dòng)并且不改變視圖大小,大于視圖高度后動(dòng)態(tài)改變視圖大小且性能會(huì)有損失)、STYLE_FOLLOW_PIN(不會(huì)改變視圖大小,先縱向跟隨移動(dòng),大于視圖高度后固定)、STYLE_FOLLOW_CENTER(不會(huì)改變視圖大小,先縱向跟隨移動(dòng),大于視圖高度后讓視圖保持在移動(dòng)的距離中心點(diǎn)).
- 支持二級(jí)刷新事件(TwoLevelSmoothRefreshLayout),PS:淘寶二樓、京東活動(dòng).
- 支持橫向刷新(HorizontalSmoothRefreshLayout).
- 支持ListView、GridView、RecyclerView加載更多的同步平滑滾動(dòng).
- 支持多狀態(tài)視圖:STATE_CONTENT(默認(rèn)狀態(tài))、STATE_ERROR(異常狀態(tài))、STATE_EMPTY(空狀態(tài))、STATE_CUSTOM(自定義狀態(tài)).
- 支持手勢:同步Fling(刷新視圖仍可見的情況下,會(huì)先回滾隱藏刷新視圖,而后向下傳遞Fling手勢).
- 支持作為可拉伸內(nèi)部視圖布局使用(類小米設(shè)置頁效果).
- 豐富的回調(diào)接口和調(diào)試信息,可利用現(xiàn)有API實(shí)現(xiàn)豐富的效果.
演示程序
下載 Demo.apk
更新日志
老版本升級(jí)務(wù)必查看
快照
-
測試?yán)焓湛s效果(1.6.2版本添加)
test_scale_effect.gif -
測試橫向拉伸收縮效果(1.6.2版本添加)
test_horizontal_scale_effect.gif -
測試橫向刷新(1.5.0版本添加)
test_horizontal_refresh.gif -
測試橫向RecyclerView刷新(1.5.0版本添加)
test_horizontal_recyclerView.gif -
測試多方向布局下的刷新
test_multi_direction_views.gif -
測試QQ瀏覽器樣式
test_qq_web_browser_style.gif -
測試QQ活動(dòng)樣式
test_qq_style.gif -
測試2級(jí)刷新
test_two_level_refresh.gif -
包含ListView
with_listView.gif -
包含RecyclerView
with_recyclerView.gif -
包含ViewPager
with_viewPager.gif -
CoordinatorLayout
with_recyclerView_in_coordinatorLayout.gif -
越界回彈模式
test_overScroll.gif -
測試嵌套滑動(dòng)
test_nested_scroll.gif
使用
Gradle
repositories {
...
maven { url 'https://jitpack.io' }
}
dependencies {
//核心基礎(chǔ)庫,包含絕大多數(shù)功能,擴(kuò)展庫必須依賴本庫(從1.6.0版本開始Core庫不再自帶刷新視圖實(shí)現(xiàn),只包含核心功能)
compile 'com.github.dkzwm.SmoothRefreshLayout:core:1.6.3.2'
//默認(rèn)Classic樣式的刷新視圖實(shí)現(xiàn)庫(從1.6.0版本才有,是從老版本的Core庫中拆分出來的庫)
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-classic:1.6.3.2'
//默認(rèn)Material樣式的刷新視圖實(shí)現(xiàn)庫(從1.6.0版本才有,是從老版本的Core庫中拆分出來的庫)
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-material:1.6.3.2'
//工具類庫,帶有一些快捷配置工具(自動(dòng)滾動(dòng)刷新工具,快速設(shè)置AppBarLayout工具)
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-utils:1.6.3.2'
//擴(kuò)展支持二級(jí)刷新庫
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-two-level:1.6.3.2'
//擴(kuò)展支持橫向刷新庫
compile 'com.github.dkzwm.SmoothRefreshLayout:ext-horizontal:1.6.3.2'
}
在Xml中配置
<?xml version="1.0" encoding="utf-8"?>
<me.dkzwm.widget.srl.SmoothRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</me.dkzwm.widget.srl.SmoothRefreshLayout>
Java代碼配置
SmoothRefreshLayout refreshLayout = (SmoothRefreshLayout)findViewById(R.id.smoothRefreshLayout);
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 <T extends IIndicator> {
byte TYPE_HEADER = 0;
byte TYPE_FOOTER = 1;
byte STYLE_DEFAULT = 0;
byte STYLE_SCALE = 1;
byte STYLE_PIN = 2;
byte STYLE_FOLLOW_SCALE = 3;
byte STYLE_FOLLOW_PIN = 4;
byte STYLE_FOLLOW_CENTER = 5;
/**
* 返回是頭部視圖還是尾部視圖;
*/
int getType();
/**
* 一般情況都是View實(shí)現(xiàn)本接口,所以返回this;
*/
View getView();
/**
* 獲取視圖樣式,自1.4.8版本后支持6種樣式,STYLE_DEFAULT、STYLE_SCALE、STYLE_PIN、STYLE_FOLLOW_SCALE、STYLE_FOLLOW_PIN、STYLE_FOLLOW_CENTER;
*/
int getStyle();
/**
* 獲取視圖的自定義高度,當(dāng)視圖樣式為STYLE_SCALE和STYLE_FOLLOW_SCALE時(shí),必須返回一個(gè)確切且大于0的值,使用橫向刷新庫時(shí),該屬性實(shí)際應(yīng)該返回的是視圖的寬度;
* 自1.6.1版本開始,如果想要當(dāng)前視圖鋪滿布局即MATCH_PARENT,那么支持返回ViewGroup.LayoutParams.MATCH_PARENT對(duì)應(yīng)的值即`-1`;
*/
int getCustomHeight();
/**
* 手指離開屏幕;
*/
void onFingerUp(SmoothRefreshLayout layout, T indicator);
/**
* 重置視圖;
*/
void onReset(SmoothRefreshLayout layout);
/**
* 重新配置視圖,準(zhǔn)備刷新;
*/
void onRefreshPrepare(SmoothRefreshLayout layout);
/**
* 開始刷新;
*/
void onRefreshBegin(SmoothRefreshLayout layout, T indicator);
/**
* 刷新完成;
*/
void onRefreshComplete(SmoothRefreshLayout layout,boolean isSuccessful);
/**
* 當(dāng)頭部或者尾部視圖發(fā)生位置變化;
*/
void onRefreshPositionChanged(SmoothRefreshLayout layout, byte status, T indicator);
/**
* 當(dāng)頭部或者尾部視圖仍然處于處理事務(wù)中,這時(shí)候移動(dòng)其他刷新視圖則會(huì)調(diào)用該方法;
* 在1.4.6版本新加入;
*/
void onPureScrollPositionChanged(SmoothRefreshLayout layout, byte status, T indicator);
}
添加自定義刷新視圖
- 全局靜態(tài)代碼構(gòu)造
SmoothRefreshLayout.setDefaultCreator(new IRefreshViewCreator() {
@Override
public void createHeader(SmoothRefreshLayout layout) {
ClassicHeader header = new ClassicHeader(layout.getContext());
layout.setHeaderView(header);
}
@Override
public void createFooter(SmoothRefreshLayout layout) {
ClassicFooter footer = new ClassicFooter(layout.getContext());
layout.setFooterView(footer);
}
});
- 動(dòng)態(tài)代碼添加
ClassicHeader header = new ClassicHeader(mRefreshLayout.getContext());
mRefreshLayout.setHeaderView(header);
ClassicFooter footer = new ClassicFooter(mRefreshLayout.getContext());
mRefreshLayout.setFooterView(footer);
- 請直接寫入Xml文件,SmoothRefreshLayout會(huì)根據(jù)添加的View是否是實(shí)現(xiàn)了IRefreshView接口進(jìn)行判斷
實(shí)現(xiàn)類QQ下拉阻尼效果
mRefreshLayout.setIndicatorOffsetCalculator(new IIndicator.IOffsetCalculator() {
@Override
public float calculate(@IIndicator.MovingStatus int status, int currentPos, float offset) {
if (status == IIndicator.MOVING_HEADER) {
if (offset < 0) {
//如果希望拖動(dòng)縮回時(shí)類似QQ一樣沒有阻尼效果,阻尼效果只存在于下拉則可以在此返回offset
//如果希望拖動(dòng)縮回時(shí)類似QQ一樣有阻尼效果,那么請注釋掉這個(gè)判斷語句
return offset;
}
return (float) Math.pow(Math.pow(currentPos / 2, 1.28d) + offset, 1 / 1.28d) * 2 - currentPos;
} else if (status == IIndicator.MOVING_FOOTER) {
if (offset > 0) {
//如果希望拖動(dòng)縮回時(shí)類似QQ一樣沒有阻尼效果,阻尼效果只存在于上拉則可以在此返回offset
//如果希望拖動(dòng)縮回時(shí)類似QQ一樣有阻尼效果,那么請注釋掉這個(gè)判斷語句
return offset;
}
return -((float) Math.pow(Math.pow(currentPos / 2, 1.28d) - offset, 1 / 1.28d) * 2 - currentPos);
} else {
if (offset > 0) {
return (float) Math.pow(offset, 1 / 1.28d) * 2;
} else if (offset < 0) {
return -(float) Math.pow(-offset, 1 / 1.28d) * 2;
} else {
return offset;
}
}
}
});
Xml屬性
SmoothRefreshLayout 自身配置
| 名稱 | 類型 | 描述 |
|---|---|---|
| sr_content | reference | 指定內(nèi)容視圖的資源ID |
| sr_resistance | float | 移動(dòng)刷新視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f) |
| sr_resistanceOfFooter | float | 移動(dòng)Footer視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f) |
| sr_resistanceOfHeader | float | 移動(dòng)Header視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f) |
| sr_ratioToRefresh | float | 觸發(fā)刷新時(shí)位置占刷新視圖的高度比(默認(rèn):1.1f) |
| sr_ratioOfHeaderToRefresh | float | 觸發(fā)刷新時(shí)位置占Header視圖的高度比(默認(rèn):1.1f) |
| sr_ratioOfFooterToRefresh | float | 觸發(fā)加載更多時(shí)位置占Footer視圖的高度比(默認(rèn):1.1f) |
| sr_ratioToKeep | float | 刷新中保持視圖位置占刷新視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果 |
| sr_ratioToKeepHeader | float | 刷新中保持視圖位置占Header視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果 |
| sr_ratioToKeepFooter | float | 刷新中保持視圖位置占Footer視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果 |
| sr_maxMoveRatio | float | 最大移動(dòng)距離占刷新視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā)) |
| sr_maxMoveRatioOfHeader | float | 最大移動(dòng)距離占Header視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā)) |
| sr_maxMoveRatioOfFooter | float | 最大移動(dòng)距離占Footer視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā)) |
| sr_closeDuration | integer | 指定收縮刷新視圖到起始位置的時(shí)長(默認(rèn):500) |
| sr_closeHeaderDuration | integer | 指定收縮Header視圖到起始位置的時(shí)長(默認(rèn):500) |
| sr_closeFooterDuration | integer | 指定收縮Footer視圖到起始位置的時(shí)長(默認(rèn):500) |
| sr_backToKeepDuration | integer | 設(shè)置回滾到保持刷新視圖位置的時(shí)間(默認(rèn):200) |
| sr_backToKeepHeaderDuration | integer | 設(shè)置回滾到保持Header視圖位置的時(shí)間(默認(rèn):200) |
| sr_backToKeepFooterDuration | integer | 設(shè)置回滾到保持Footer視圖位置的時(shí)間(默認(rèn):200) |
| sr_enablePinContent | boolean | 固定內(nèi)容視圖(默認(rèn):false) |
| sr_enableKeep | boolean | 刷新中保持視圖停留在所設(shè)置的應(yīng)該停留的位置(默認(rèn):true) |
| sr_enablePullToRefresh | boolean | 拉動(dòng)刷新,下拉或者上拉到觸發(fā)刷新位置即立即觸發(fā)刷新(默認(rèn):false) |
| sr_enableOverScroll | boolean | 越界回彈(默認(rèn):true) |
| sr_emptyLayout | reference | 指定空狀態(tài)下對(duì)應(yīng)的布局資源ID |
| sr_errorLayout | reference | 指定異常狀態(tài)下對(duì)應(yīng)的布局資源ID |
| sr_customLayout | reference | 指定自定義狀態(tài)下對(duì)應(yīng)的布局資源ID |
| sr_state | enum | 狀態(tài)設(shè)置(默認(rèn):STATE_CONTENT) |
| sr_enableRefresh | boolean | 設(shè)置是否啟用下拉刷新(默認(rèn):ture) |
| sr_enableLoadMore | boolean | 設(shè)置是否啟用加載更多(默認(rèn):false) |
| sr_headerBackgroundColor | color | 設(shè)置Header刷新高度區(qū)域的背景色 |
| sr_footerBackgroundColor | color | 設(shè)置Footer刷新高度區(qū)域的背景色 |
| sr_mode | enum | 模式設(shè)置(默認(rèn):MODE_DEFAULT為刷新控件模式) |
| sr_stickyHeader | reference | 指定黏貼頭部的資源ID,當(dāng)SRL處于移動(dòng)頭部視圖時(shí)該黏貼頭部會(huì)跟隨Target視圖進(jìn)行移動(dòng) |
TwoLevelSmoothRefreshLayout 自身配置
| 名稱 | 類型 | 描述 |
|---|---|---|
| sr_enableTwoLevelRefresh | boolean | 設(shè)置是否啟用二級(jí)刷新(默認(rèn):true) |
| sr_backToKeep2Duration | boolean | 設(shè)置回滾到保持二級(jí)刷新頭部處于二級(jí)刷新過程中的時(shí)長(默認(rèn):500) |
| sr_closeHeader2Duration | boolean | 設(shè)置關(guān)閉二級(jí)刷新頭部的時(shí)長(默認(rèn):500) |
SmoothRefreshLayout包裹內(nèi)部其他View支持配置
| 名稱 | 類型 | 描述 |
|---|---|---|
| layout_gravity | flag | 指定其它被包裹視圖的對(duì)齊屬性(非 targetView、非refreshView) |
SmoothRefreshLayout java屬性設(shè)置方法
| 名稱 | 參數(shù) | 描述 |
|---|---|---|
| setHeaderView | IRefreshView | 配置頭部視圖 |
| setFooterView | IRefreshView | 配置尾部視圖 |
| setContentView | int,View | 配置內(nèi)容視圖,參數(shù)1:設(shè)置內(nèi)容視圖對(duì)應(yīng)的狀態(tài),參數(shù)2:狀態(tài)對(duì)應(yīng)的內(nèi)容視圖 |
| setMode | int | 配置當(dāng)前模式 |
| setState | int | 配置當(dāng)前狀態(tài) |
| setState | int,boolean | 配置當(dāng)前狀態(tài),參數(shù)1:當(dāng)前狀態(tài),參數(shù)2:是否使用漸變動(dòng)畫過渡 |
| setDisableWhenAnotherDirectionMove | boolean | 內(nèi)部視圖含有其他方向滑動(dòng)視圖時(shí)需設(shè)置該屬性為ture(默認(rèn):false) |
| setEnableNextPtrAtOnce | boolean | 刷新完成即可再次刷新 |
| setMaxOverScrollDuration | int | 設(shè)置越界回彈動(dòng)畫最長時(shí)間(默認(rèn):500) |
| setMinOverScrollDuration | int | 設(shè)置越界回彈動(dòng)畫最短時(shí)間(默認(rèn):150) |
| setResistance | float | 移動(dòng)刷新視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f) |
| setResistanceOfFooter | float | 移動(dòng)Footer視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f) |
| setResistanceOfHeader | float | 移動(dòng)Header視圖時(shí)候的移動(dòng)阻尼(默認(rèn):1.65f) |
| setRatioToRefresh | float | 觸發(fā)刷新時(shí)位置占刷新視圖的高度比(默認(rèn):1.1f) |
| setRatioOfHeaderToRefresh | float | 觸發(fā)刷新時(shí)位置占Header視圖的高度比(默認(rèn):1.1f) |
| setRatioOfFooterToRefresh | float | 觸發(fā)加載更多時(shí)位置占Footer視圖的高度比(默認(rèn):1.1f) |
| setRatioToKeep | float | 刷新中保持視圖位置占刷新視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果 |
| setRatioToKeepHeader | float | 刷新中保持視圖位置占Header視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果 |
| setRatioToKeepFooter | float | 刷新中保持視圖位置占Footer視圖的高度比(默認(rèn):1f),該屬性的值必須小于等于觸發(fā)刷新高度比才會(huì)有效果 |
| setMaxMoveRatio | float | 最大移動(dòng)距離占刷新視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā)) |
| setMaxMoveRatioOfHeader | float | 最大移動(dòng)距離占Header視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā)) |
| setMaxMoveRatioOfFooter | float | 最大移動(dòng)距離占Footer視圖的高度比(默認(rèn):0f,表示不會(huì)觸發(fā)) |
| setDurationToClose | int | 指定收縮刷新視圖到起始位置的時(shí)長(默認(rèn):500) |
| setDurationToCloseHeader | int | 指定收縮Header視圖到起始位置的時(shí)長(默認(rèn):500) |
| setDurationToCloseFooter | int | 指定收縮Footer視圖到起始位置的時(shí)長(默認(rèn):500) |
| setDurationOfBackToKeep | integer | 設(shè)置回滾到保持刷新視圖位置的時(shí)間(默認(rèn):200) |
| setDurationOfBackToKeepHeader | integer | 設(shè)置回滾到保持Header視圖位置的時(shí)間(默認(rèn):200) |
| setDurationOfBackToKeepFooter | integer | 設(shè)置回滾到保持Footer視圖位置的時(shí)間(默認(rèn):200) |
| setEnablePinContentView | boolean | 固定內(nèi)容視圖(默認(rèn):false) |
| setEnablePullToRefresh | boolean | 拉動(dòng)刷新,下拉或者上拉到觸發(fā)刷新位置即立即觸發(fā)刷新(默認(rèn):false) |
| setEnableOverScroll | boolean | 越界回彈(默認(rèn):true) |
| setEnableInterceptEventWhileLoading | boolean | 刷新中攔截不響應(yīng)觸摸操作(默認(rèn):false) |
| setEnableHeaderDrawerStyle | boolean | Header抽屜樣式,即Header視圖在內(nèi)容視圖下面(默認(rèn):false) |
| setEnableFooterDrawerStyle | boolean | Footer抽屜樣式,即Footer視圖在內(nèi)容視圖下面(默認(rèn):false) |
| setDisablePerformRefresh | boolean | 關(guān)閉觸發(fā)Header刷新(默認(rèn):false) |
| setDisablePerformLoadMore | boolean | 關(guān)閉觸發(fā)Footer刷新(默認(rèn):false) |
| setEnableNoMoreData | boolean | 設(shè)置Footer沒有更多數(shù)據(jù),該選項(xiàng)設(shè)置true時(shí)在Frame層等同setDisablePerformLoadMore設(shè)置為true,只是自定義視圖可以根據(jù)該標(biāo)志位改變視圖樣式,ClassicFooter默認(rèn)實(shí)現(xiàn)了對(duì)該屬性的支持(默認(rèn):false) |
| setEnableNoSpringBackWhenNoMoreData | boolean | 設(shè)置Footer沒有更多數(shù)據(jù)情況下不再回彈 |
| setDisableRefresh | boolean | 禁用Header刷新(默認(rèn):false) |
| setDisableLoadMore | boolean | 禁用Footer刷新(默認(rèn):false) |
| setEnableKeepRefreshView | boolean | 刷新中保持視圖停留在所設(shè)置的應(yīng)該停留的位置(默認(rèn):true) |
| setEnableAutoLoadMore | boolean | 到底部自動(dòng)加載(默認(rèn):false) |
| setEnablePinRefreshViewWhileLoading | boolean | 固定刷新視圖在所設(shè)置的應(yīng)該停留的位置,并且不響應(yīng)移動(dòng),即Material樣式(默認(rèn):false),設(shè)置前提是開啟了setEnablePinContentView和setEnableKeepRefreshView2個(gè)選項(xiàng),否則運(yùn)行時(shí)會(huì)拋出異常 |
| setSpringInterpolator | Interpolator | 設(shè)置默認(rèn)的滾動(dòng)插值器 |
| setOverScrollInterpolator | Interpolator | 設(shè)置越界回彈時(shí)的滾動(dòng)插值器 |
| setEnableCheckInsideAnotherDirectionView | boolean | 設(shè)置是否開啟檢查手指按下點(diǎn)是否位于其他方向滾動(dòng)視圖內(nèi),該屬性起作用必須滿足開啟setDisableWhenAnotherDirectionMove
|
| setEnableCompatLoadMoreScroll | boolean | 設(shè)置是否開啟加載更多時(shí)的同步滾動(dòng)(默認(rèn):true) |
| setHeaderBackgroundColor | int | 設(shè)置Header刷新高度區(qū)域的背景色,可用以替代在Header樣式為不需要?jiǎng)討B(tài)改變視圖大小的情況下又想設(shè)置刷新高度區(qū)域的背景色的場景 |
| setFooterBackgroundColor | int | 設(shè)置Footer刷新高度區(qū)域的背景色,可用以替代在Footer樣式為不需要?jiǎng)討B(tài)改變視圖大小的情況下又想設(shè)置刷新高度區(qū)域的背景色的場景 |
| setEnableSmoothRollbackWhenCompleted | boolean | 設(shè)置開啟當(dāng)刷新完成時(shí),回滾動(dòng)作不能被打斷 |
| setDisableLoadMoreWhenContentNotFull | boolean | 設(shè)置當(dāng)內(nèi)容視圖未滿屏?xí)r關(guān)閉加載更多 |
| setStickyHeaderResId | int | 設(shè)置黏貼頭部視圖的資源ID |
SmoothRefreshLayout 回調(diào)
| 名稱 | 參數(shù) | 描述 |
|---|---|---|
| setOnRefreshListener | T extends OnRefreshListener | 設(shè)置刷新事件監(jiān)聽回調(diào) |
| setOnStateChangedListener | OnStateChangedListener | 設(shè)置狀態(tài)改變回調(diào) |
| setChangeStateAnimatorCreator | IChangeStateAnimatorCreator | 設(shè)置改變狀態(tài)時(shí)使用的動(dòng)畫創(chuàng)建者 |
| addOnUIPositionChangedListener | OnUIPositionChangedListener | 添加視圖位置變化的監(jiān)聽回調(diào) |
| removeOnUIPositionChangedListener | OnUIPositionChangedListener | 移除視圖位置變化的監(jiān)聽回調(diào) |
| setOnLoadMoreScrollCallback | OnLoadMoreScrollCallback | 設(shè)置Footer完成刷新后進(jìn)行平滑滾動(dòng)的回調(diào) |
| setOnPerformAutoLoadMoreCallBack | OnPerformAutoLoadMoreCallBack | 設(shè)置觸發(fā)自動(dòng)加載更多的條件回調(diào),如果回調(diào)的canAutoLoadMore()方法返回true則會(huì)立即觸發(fā)加載更多 |
| setOnHeaderEdgeDetectCallBack | OnHeaderEdgeDetectCallBack | 設(shè)置檢查內(nèi)容視圖是否在頂部的重載回調(diào)(SmoothRefreshLayout內(nèi)部isNotYetInEdgeCannotMoveHeader()方法) |
| setOnFooterEdgeDetectCallBack | OnFooterEdgeDetectCallBack | 設(shè)置檢查內(nèi)容視圖是否在底部的重載回調(diào)(SmoothRefreshLayout內(nèi)部isNotYetInEdgeCannotMoveFooter()方法) |
| setOnHookHeaderRefreshCompleteCallback | OnHookUIRefreshCompleteCallBack | 設(shè)置Header刷新完成的Hook回調(diào),可實(shí)現(xiàn)延遲完成刷新 |
| setOnHookFooterRefreshCompleteCallback | OnHookUIRefreshCompleteCallBack | 設(shè)置Footer刷新完成的Hook回調(diào),可實(shí)現(xiàn)延遲完成刷新 |
| setOnInsideAnotherDirectionViewCallback | OnInsideAnotherDirectionViewCallback | 設(shè)置檢查手指按下點(diǎn)是否位于其他滾動(dòng)視圖內(nèi)的重載回調(diào),可自定義判斷邏輯,提高判斷效率 |
SmoothRefreshLayout 其它
| 名稱 | 參數(shù) | 描述 |
|---|---|---|
| debug(靜態(tài)方法) | boolean | Debug開關(guān) |
| setDefaultCreator(靜態(tài)方法) | IRefreshViewCreator | 設(shè)置刷新視圖創(chuàng)建者,如果沒有特殊指定刷新視圖且設(shè)置的模式需要刷新視圖則會(huì)調(diào)用創(chuàng)建者構(gòu)建刷新視圖 |
| refreshComplete | 無參 | 刷新完成,且設(shè)置最后一次刷新狀態(tài)為成功 |
| refreshComplete | boolean | 刷新完成,參數(shù):設(shè)置最后一次刷新是否刷新成功 |
| refreshComplete | boolean,long | 刷新完成,參數(shù)1:設(shè)置最后一次刷新是否刷新成功,參數(shù)2:設(shè)置延遲重置刷新狀態(tài)的時(shí)間(會(huì)先觸發(fā)刷新視圖的刷新完成回調(diào),但在延遲的時(shí)間內(nèi)庫實(shí)際上狀態(tài)仍是刷新狀態(tài)) |
| refreshComplete | long | 刷新完成,且設(shè)置最后一次刷新狀態(tài)為成功,參數(shù):設(shè)置延遲重置刷新狀態(tài)的時(shí)間(會(huì)先觸發(fā)刷新視圖的刷新完成回調(diào),但在延遲的時(shí)間內(nèi)庫實(shí)際上狀態(tài)仍是刷新狀態(tài)) |
| setLoadingMinTime | long | 設(shè)置開始刷新到結(jié)束刷新的最小時(shí)間差(默認(rèn):500),參數(shù):時(shí)間差 |
| autoRefresh | 無參 | 自動(dòng)觸發(fā)Header刷新,立即觸發(fā)刷新事件并滾動(dòng)到觸發(fā)Header刷新位置 |
| autoRefresh | boolean | 自動(dòng)觸發(fā)Header刷新,參數(shù):是否立即觸發(fā)刷新事件,會(huì)滾動(dòng)到觸發(fā)Header刷新位置 |
| autoRefresh | boolean,boolean | 自動(dòng)觸發(fā)Header刷新,參數(shù)1:是否立即觸發(fā)刷新事件,參數(shù)2:是否滾動(dòng)到觸發(fā)Header刷新位置 |
| autoLoadMore | 無參 | 自動(dòng)觸發(fā)Footer刷新,立即觸發(fā)刷新事件并滾動(dòng)到觸發(fā)Footer刷新位置 |
| autoLoadMore | boolean | 自動(dòng)觸發(fā)Footer刷新,參數(shù):是否立即觸發(fā)刷新事件,會(huì)滾動(dòng)到觸發(fā)Footer刷新位置 |
| autoLoadMore | boolean,boolean | 自動(dòng)觸發(fā)Footer刷新,參數(shù)1:是否立即觸發(fā)刷新事件,參數(shù)2:是否滾動(dòng)到觸發(fā)Footer刷新位置 |
| setLoadMoreScrollTargetView | View | 設(shè)置Footer移動(dòng)時(shí),響應(yīng)移動(dòng)事件的內(nèi)容視圖,例如在SmoothRefreshLayout中有一個(gè)CoordinatorLayout,CoordinatorLayout中有AppbarLayout、RecyclerView等,加載更多時(shí)希望被移動(dòng)的視圖為RecyclerView而不是CoordinatorLayout,那么設(shè)置RecyclerView為TargetView即可 |
TwoLevelSmoothRefreshLayout java屬性設(shè)置方法
| 名稱 | 參數(shù) | 描述 |
|---|---|---|
| setRatioOfHeaderToHintTwoLevel | float | 設(shè)置觸發(fā)二級(jí)刷新提示時(shí)的位置占Header視圖的高度比 |
| setRatioOfHeaderToTwoLevel | float | 設(shè)置觸發(fā)二級(jí)刷新時(shí)的位置占Header視圖的高度比 |
| setRatioToKeepTwoLevelHeader | float | 二級(jí)刷新中保持視圖位置占Header視圖的高度比(默認(rèn):1f) |
| setDisableTwoLevelRefresh | boolean | 設(shè)置是否關(guān)閉二級(jí)刷新(默認(rèn):false) |
| setDurationOfBackToKeepTwoLevel | int | 設(shè)置回滾到保持二級(jí)刷新Header視圖位置的時(shí)間(默認(rèn):500) |
| setDurationToCloseTwoLevel | int | 設(shè)置二級(jí)刷新Header刷新完成回滾到起始位置的時(shí)間(默認(rèn):500) |
TwoLevelSmoothRefreshLayout 其它
| 名稱 | 參數(shù) | 描述 |
|---|---|---|
| autoTwoLevelRefreshHint | 無參 | 自動(dòng)觸發(fā)二級(jí)刷新提示并滾動(dòng)到觸發(fā)提示位置后回滾回起始位置 |
| autoTwoLevelRefreshHint | int | 自動(dòng)觸發(fā)二級(jí)刷新提示并滾動(dòng)到觸發(fā)提示位置后停留指定時(shí)長,參數(shù):停留多長時(shí)間 |
| autoTwoLevelRefreshHint | boolean | 自動(dòng)觸發(fā)二級(jí)刷新提示是否滾動(dòng)到觸發(fā)提示位置后回滾回起始位置,參數(shù):是否滾到到觸發(fā)位置 |
| autoTwoLevelRefreshHint | boolean,int | 自動(dòng)觸發(fā)二級(jí)刷新提示,參數(shù)1:是否滾動(dòng)到觸發(fā)位置,參數(shù)2:停留多長時(shí)間 |
| autoTwoLevelRefreshHint | boolean,int,boolean | 自動(dòng)觸發(fā)二級(jí)刷新提示,參數(shù)1:是否滾動(dòng)到觸發(fā)位置,參數(shù)2:停留多長時(shí)間,參數(shù)3:是否可以被觸摸打斷,即觸發(fā)提示動(dòng)作過程中攔截觸摸事件,直到回滾到起始位置并重置為默認(rèn)狀態(tài) |
Thanks
License
MIT License
Copyright (c) 2017 dkzwm
Copyright (c) 2015 liaohuqiu.net
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.













