PDRefreshLayout
PDRefreshLayout是一個(gè)支持上拉刷新会放,下拉加載的控件顷蟆。主要特性有:
- 支持任何布局的下拉刷新
- 支持加載更多
- 可以自定義Header的刷新效果和Footer的加載更多效果
- 支持刷新和加載時(shí)的監(jiān)聽(tīng)事件
- 支持自動(dòng)彈出下拉刷新方法
效果圖
使用方法
-
添加gradle依賴
compile 'com.sflin:pdrefreshlayout:1.0.5'
-
在xml中添加PDRefreshLayout
<?xml version="1.0" encoding="utf-8"?> <com.sflin.pdrefreshlayout.PDRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/refresh" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/client_list" android:overScrollMode="never" android:layout_width="match_parent" android:layout_height="match_parent"/> </com.sflin.pdrefreshlayout.PDRefreshLayout>
-
在Activity中添加監(jiān)聽(tīng)事件
mRefresh.setRefreshListener(new PDRefreshListener() { @Override public void onRefresh() {//刷新中時(shí)調(diào)用 super. onRefresh(); new Handler().postDelayed(new Runnable() { @Override public void run() { //這個(gè)方法設(shè)置false來(lái)完成刷新 mRefresh.setRefreshing(false); } },1000); } @Override public void onLoadMore() {//加載中時(shí)調(diào)用 super. onLoadMore(); new Handler().postDelayed(new Runnable() { @Override public void run() { //這個(gè)方法設(shè)置false來(lái)完成加載 mRefresh.setRefreshing(false); } },1000); } @Override public void onFinishRefresh() {//刷新完成調(diào)用 super.onFinishRefresh(); } @Override public void onFinishLoadMore() {//加載完成調(diào)用 super.onFinishLoadMore(); } });
以上3步就可以完成刷新或者加載
除了以上幾個(gè)方法诫隅,控件還提供其他幾個(gè)方法
-
setRefreshState(boolean state)
- true表示開(kāi)啟下拉刷新(默認(rèn)開(kāi)啟)
- false表示禁止下拉刷新
-
setLoadMoreState(boolean state)
- true表示開(kāi)啟上拉加載(默認(rèn)開(kāi)啟)
- false表示禁止上拉加載
setHeadHeight(float mHeadHeight) 設(shè)置頭部下拉高度(就是表示頭部下拉到此高度,可進(jìn)入刷新?tīng)顟B(tài))
setFootHeight(float mFootHeight) 設(shè)置底部上拉高度(就是表示底部上拉到此高度帐偎,可進(jìn)入加載狀態(tài))
setHeaderView(IHeaderView headerView) 設(shè)置頭部下拉刷新效果
setBottomView(IFooterView bottomView) 設(shè)置底部上拉加載效果
public void setIsAutoPull(boolean isAutoPull) --true 設(shè)置自動(dòng)彈出下拉頭刷新
自定義Header和Footer
-
Header
public interface IHeaderView { View getView(); int getHeadHeight(); /** * 下拉準(zhǔn)備刷新動(dòng)作 * @param moveY 移動(dòng)的距離 * @param headHeight 底部高度 */ void onRefreshingDown(float moveY, float headHeight); /** * 下拉釋放過(guò)程 * @param moveY * @param headHeight * @param state 狀態(tài)值 0表示手指離開(kāi)屏幕 1表示刷新回彈 */ void onRefreshReleasing(float moveY, float headHeight,int state); /** * 完成刷新 * @param moveY * @param headHeight * @param isRefreshing 是否在刷新 */ void onFinish(float moveY, float headHeight,boolean isRefreshing); }
具體實(shí)現(xiàn)代碼可以參考DefaultRefreshView和RubberView的實(shí)現(xiàn)代碼
-
Footer
public interface IFooterView { View getView(); int getFootHeight(); /** * 上拉準(zhǔn)備加載更多的動(dòng)作 * @param moveY 移動(dòng)的距離 * @param bottomHeight 底部高度 */ void onLoadingUp(float moveY, float bottomHeight); /** * 上拉釋放過(guò)程 * @param moveY * @param bottomHeight * @param state 狀態(tài)值 0表示手指離開(kāi)屏幕 1表示加載回彈 */ void onLoadReleasing(float moveY, float bottomHeight,int state); /** * 完成加載 * @param moveY * @param bottomHeight * @param isRefreshing 是否在刷新 */ void onFinish(float moveY, float bottomHeight,boolean isRefreshing); }
具體實(shí)現(xiàn)代碼可以參考DefaultLoadMoreView的實(shí)現(xiàn)代碼
其他說(shuō)明
- 控件只能有一個(gè)子View
GitHub地址:https://github.com/HellForGate/PDRefreshLayout
如果你覺(jué)得還不錯(cuò)阎肝,歡迎Star. 歡迎加入交流群: 114925972