QRefreshLayout
Introduction: 下拉刷新,上拉加载更多,自动加载更多,用法同 SwipeRefreshLayout,兼容所有 view,兼容 nested 滚动,可以自定义刷新动画
Tags:
下拉刷新,上拉加载更多,自动加载更多,用法同 SwipeRefreshLayout,兼容所有 view,兼容 nested 滚动,可以自定义刷新动画,支持下拉到二楼
不定期更新,大家有什么想加的功能和意见可以在 issues 里提出来,我会尽力而为。
效果展示
demo 下载
版本更新说明
使用方式
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.zhangxq:QRefreshLayout:1.0.8'
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.zhangxq.refreshlayout.QRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</com.zhangxq.refreshlayout.RefreshLayout>
</LinearLayout>
refreshLayout.setOnRefreshListener(this);
refreshLayout.setOnLoadListener(this);
接口说明
名称 | 功能 |
---|---|
setOnRefreshListener | 设置下拉刷新监听 |
setOnLoadListener | 设置加载更多监听 |
setRefreshing | 打开或者关闭下拉刷新动画 |
setLoading | 打开或关闭加载更多动画 |
setColorSchemeResources setColorSchemeColors | 设置默认下拉刷新进度圈颜色 |
setProgressBackgroundColorSchemeResource setProgressBackgroundColorSchemeResource | 设置默认下拉刷新进度圈背景颜色 |
setRefreshView | 设置下拉刷新 view |
setLoadView | 设置加载更多 view |
setLoadEnable | 设置加载更多开关, setOnLoadListener 调用后默认开启 |
setAutoLoad | 设置自动加载更多开关,setOnLoadListener 调用后默认开启 |
setListViewScrollListener | 设置 ListView 的滚动监听器(由于需要做自动加更多,所以占用了监听器,在这里回调回来) |
setPullToRefreshHeight | 设置下拉到"释放即可更新"的高度(默认 170px) |
setLoadToRefreshHeight | 设置上拉到"释放即可加载更多"的高度(默认 170px) |
setRefreshHeight | 设置下拉刷新动画高度(默认 150px,需要在 setRefreshing 之前调用) |
setLoadHeight | 设置加载更多动画高度(默认 110px) |
setIsCanSecondFloor | 设置是否可以到达二楼 |
setSecondFloorView | 设置二楼 view,仅限于使用默认 header 的情况 |
isSecondFloor | 当前是否在二楼 |
setBackToFirstFloor | 回到一楼 |
setPullToSecondFloorHeight | 设置下拉到"释放到达二楼"的高度(默认 500px) |
自定义 header 和 footer
setRefreshView 和 setLoadView 两个方法用于接收用户自定义的 header 和 footer,setRefreshView 接收一个继承自 RefreshView 的 view,setLoadView 接收一个继承自 LoadView 的 view,RefreshView 和 LoadView 的区别只是 RefreshView 比 LoadView 多了三个二楼相关的虚方法,所以我们只用看一下 RefreshView 的源码:
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.RelativeLayout;
import com.zhangxq.refreshlayout.defaultview.Refresh;
/**
* Created by zhangxiaoqi on 2019/4/22. */
public abstract class RefreshView extends RelativeLayout implements Refresh {
public RefreshView(Context context) {
this(context, null);
}
public RefreshView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setGravity(Gravity.CENTER);
}
/**
* 释放即可到达二楼
*/
public abstract void setReleaseToSecondFloor();
/**
* 展示二楼
*/
public abstract void setToSecondFloor();
/**
* 回到一楼
*/
public abstract void setToFirstFloor();
}
查看方法的注释,就可以明白对应的功能。 RefreshView 和 LoadView 都实现了一个 Refresh 接口,代码如下:
public interface Refresh {
/**
* 手指拖动中
*
* @param height 显示出来的区域高度
* @param refreshHeight 下拉到触发刷新位置的显示区域高度
* @param totalHeight 总的显示区域高度
*/
void setHeight(float height, float refreshHeight, float totalHeight);
/**
* 触发刷新
*/
void setRefresh();
/**
* 下拉刷新
*/
void setPullToRefresh();
/**
* 释放即可刷新
*/
void setRefeaseToRefresh();
}
可以看到,接口提供了三个回调方法,对应与下拉或上拉过程中常用的三个时间点,还有一个 setHeight 方法提供了手指拖动的距离,方便用户处理拖动动画。 继承 RefreshView 或者 LoadView 覆盖这四个方法,就可以方便得实现自己想要的动画效果。
下拉到二楼功能
使用默认 header 情况下,如下两行即可实现下拉到二楼的功能,第二行的参数 view 就是你想要展示的二楼布局 view。
qRefreshLayout.setIsCanSecondFloor(true);
qRefreshLayout.setSecondFloorView(view);
使用自定义 header,则可以去掉第二行,然后使用自定义 header 中的三个回调方法,实现自己的二楼效果。