Home

Awesome

VRefreshLayout

一个竖直方向的下拉刷新控件,支持自定义Header,可配置参数,最重要的特点是刷新时头部置顶显示,且不影响列表滑动

为什么要做头部置顶显示

现在越来越多的App下拉刷新时是置顶显示的,大家可以看手机京东,天猫商城,小米商城,汽车之家等APP,我们在下拉刷新时,头部的刷新视图是保持显示的,这样在滚动列表的时候,用户可以知道当前正在刷新状态,而传统的下拉刷新库,比如Android-PullToRefreshandroid-Ultra-Pull-To-Refresh,是不支持的头部置顶显示的,用户往下翻看时,刷新状态就可能被隐藏;google的SwpieRefreshLayout是置顶层显示的,但是它的内容区域的不会跟着动的,且可定制性太差。

功能预览

头部刷新时列表可以正常响应事件,且头部不会隐藏

自定义头部样式,例如模仿一个京东的下拉刷新动画

良好的兼容性,支持ListView/RecyclerView/ScrollView/TextViw/Image等绝大多数view

可以配置下拉高度,阻尼度以及各部分动画时长等参数

简单使用

 <com.leelay.freshlayout.verticalre.VRefreshLayout
        android:id="@+id/refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <ListView
            android:id="@+id/listView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            />

    </com.leelay.freshlayout.verticalre.VRefreshLayout>
    

java代码中,监听和控制刷新状态

 mRefreshLayout = (VRefreshLayout) findViewById(R.id.refresh_layout);
 mRefreshLayout.addOnRefreshListener(new VRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    mRefreshLayout.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mRefreshLayout.refreshComplete();
                        }
                    }, 2000);
                }
            });
 

这样就能在下拉时触发刷新时间,2000ms后刷新完成,隐藏刷新状态;

方法介绍

自定义HeaderView

自定义Header只需要集成一个ViewGroup/View,实现VRefreshLayout.UpdateHandler接口即可; 最基本的代码

public class CustomHeaderView extends ViewGroup implements VRefreshLayout.UpdateHandler{
    public CustomHeaderView(Context context) {
        super(context);
    }

    public CustomHeaderView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        
    }

    @Override
    public void onProgressUpdate(VRefreshLayout layout, VRefreshLayout.Progress progress, int status) {

    }
}

UpdateHandler只有一个方法onProgressUpdate(VRefreshLayout layout, VRefreshLayout.Progress progress, int status),重写它就能监听下拉进度和状态;

VRefreshLayout.PProgress

Progress类一个简单的Entity,其中有三个属性,分别是

status状态

public final static int STATUS_INIT = 0;//原始状态
public final static int STATUS_DRAGGING = 1;//正在下拉
public final static int STATUS_RELEASE_PREPARE = 2;//松手将要刷新
public final static int STATUS_REFRESHING = 3;//正在刷新
public final static int STATUS_RELEASE_CANCEL = 4;//松手取消
public final static int STATUS_COMPLETE = 5;//刷新完成
    

状态解析:

参考