QRefreshLayout

Introduction: 下拉刷新,上拉加载更多,自动加载更多,用法同 SwipeRefreshLayout,兼容所有 view,兼容 nested 滚动,可以自定义刷新动画
More: Author   ReportBugs   OfficialWebsite   
Tags:

下拉刷新,上拉加载更多,自动加载更多,用法同 SwipeRefreshLayout,兼容所有 view,兼容 nested 滚动,可以自定义刷新动画,支持下拉到二楼

不定期更新,大家有什么想加的功能和意见可以在 issues 里提出来,我会尽力而为。

效果展示

下拉刷新和加载更多 与 Nested 滚动兼容效果 下拉到二楼

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)

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 中的三个回调方法,实现自己的二楼效果。

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools