登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

商城APP下拉刷新库—VRefreshLayout

[复制链接]
来自: lileirunning 分类: Android精品源码 上传时间: 2016-12-7 16:48:17
Tag:
立即下载
收藏

项目介绍:

最近没有工作,在家写了一个下拉刷新库,主要是针对现在也有很多APP流行的Headr置顶显示效果,github链接在这里https://github.com/ileelay/VRefreshLayout,欢迎大家star和fork;

博客原文:https://github.com/ileelay/VRefreshLayout/blob/master/README.md

demo截图

VRefreshLayout

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

为什么要做头部置顶显示

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

功能预览

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

滑动时截图

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

京东样式

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

ImageView支持

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

参数可配置

简单使用

  • 在布局中,包裹一个将要刷新的View/ViewGroup

 <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后刷新完成,隐藏刷新状态;

方法介绍

  • setDragRate(float dragRate) 设置拖拽的阻尼比例,默认是0.5,一般设置在0-1之间比较合适;

  • setRatioOfHeaderHeightToRefresh(float ratio)  设置允许刷新的高度和HeaderView高度的比例,默认为1.0;

  • setRatioOfHeaderHeightToReach(float ratio) 设置能下拉的最大高度和HeaderView高度的比例,默认为1.6;

  • setToStartDuration(int toStartDuration) 设置回到初始状态动画执行时间,单位为ms,默认是200ms;

  • setToRetainDuration(int toRetainDuration) 设置手指离开屏幕后触发刷新时到刷新保持的位置需要的动画时长,单位为ms,默认为200ms;

  • setAutoRefreshDuration(int autoRefreshDuration) 自动刷新需要的动画时长 ,默认为800ms;

  • setCompleteStickDuration(int completeStickDuration) 刷新完成后状态保持的时长,默认为200ms;

  • setHeaderView(View view) 设置一个自定义的HeaderView;

  • setUpdateHandler(UpdateHandler updateHandler) 设置状态和进度更新处理,一般是Header实现;

  • addOnRefreshListener(OnRefreshListener onRefreshListener) 添加一个刷新回调监听,支持add方式;

  • refreshComplete() 调用次方法,可以接受刷新;

自定义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,其中有三个属性,分别是

  • totalY 可下拉的最大Y方向距离

  • currentY 当前Y方向距离

  • refreshY 触发刷新的距离这些

  • refreshY 触发刷新的距离
    这些距离的参考点是contentView的Top点;

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;//刷新完成
    

状态解析:

  • STATUS_INIT 原始状态,发生在MOVE事件之前和刷新完成headerView完全隐藏之后

  • STATUS_DRAGGING 手指拖拽状态,只有在触发下拉后且手指没有完全离开屏幕,发生在这一时间段内;

  • STATUS_RELEASE_PREPARE 拖拽的距离超过可触发刷新的距离,在手指放开到正在刷新之前的这一段时间内;

  • STATUS_REFRESHING 正在刷新,调用refreshComplete()结束该状态;

  • STATUS_COMPLETE 调用refreshComplete()方法开始,到headerView即将完全隐藏之后,这一点时间内
    这些状态正好形成一个状态循环;

参考

原创 ,装载请标明出处,谢谢!

相关源码推荐:

我来说两句
所有评论(12)
是个宝宝 2016-12-7 17:00:16
相当不错,感谢无私分享精神!
回复
gongags 2016-12-7 17:02:16
支持,感谢,祝巴士越来越好~
回复
Mr_Zhao 2016-12-7 17:08:57
感谢分享,楼主V5~
回复
kk041kk 2016-12-7 17:12:17
apkbus好的内容真的很多~赞
回复
allow.xuweibin 2016-12-7 17:12:47
感谢分享,楼主V5~
回复
chaoyue 2016-12-7 17:13:57
感谢分享,安卓巴士有你更精彩:lol
回复
士大夫11 2016-12-8 13:26:09
uu
回复
12下一页
上传代码
查看数:2520 收藏数:48 下载数: 点赞数:2
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,769657487

如何获得代码达人称号

如何成为签约作者

联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表