(4.2.38) android-Ultra-Pull-To-Refresh 使用简介

项目地址https://github.com/liaohuqiu/Android-Ultra-Pull-To-Refresh

该项目只包含下拉刷新,可以包裹任何控件,如果需要添加上拉加载,参看下篇。

引入方法1:直接导入lib库:ptr-lib,可到项目地址下载,然后将lib添加到项目

compile project(':ptr-lib')
方法2:中央库依赖compile 'in.srain.cube:ultra-ptr:1.0.11'
配置
 
 
有6个参数可配置:
  • 阻尼系数
    默认: 1.7f,越大,感觉下拉时越吃力。
  • 触发刷新时移动的位置比例
    默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。
  • 回弹延时
    默认 200ms,回弹到刷新高度所用时间
  • 头部回弹时间
    默认1000ms
  • 刷新是保持头部
    默认值 true.
  • 下拉刷新 / 释放刷新
    默认为释放刷新
[html] view plain copy
在CODE上查看代码片 派生到我的代码片
  1. <in.srain.cube.views.ptr.PtrFrameLayout  
  2.     android:id="@+id/store_house_ptr_frame"  
  3.     xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.    
  7.     cube_ptr:ptr_resistance="1.7"  
  8.     cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"  
  9.     cube_ptr:ptr_duration_to_close="300"  
  10.     cube_ptr:ptr_duration_to_close_header="2000"  
  11.     cube_ptr:ptr_keep_header_when_refresh="true"  
  12.     cube_ptr:ptr_pull_to_fresh="false" >  
  13.    
  14.     <LinearLayout  
  15.         android:id="@+id/store_house_ptr_image_content"  
  16.         android:layout_width="match_parent"  
  17.         android:layout_height="match_parent"  
  18.         android:background="@color/cube_mints_333333"  
  19.         android:clickable="true"  
  20.         android:padding="10dp">  
  21.    
  22.         <in.srain.cube.image.CubeImageView  
  23.             android:id="@+id/store_house_ptr_image"  
  24.             android:layout_width="match_parent"  
  25.             android:layout_height="match_parent" />  
  26.     </LinearLayout>  
  27.    
  28. </in.srain.cube.views.ptr.PtrFrameLayout>  
也可以在代码中配置

 
 
[java] view plain copy
在CODE上查看代码片 派生到我的代码片
  1. // the following are default settings  
  2. mPtrFrame.setResistance(1.7f);  
  3. mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);  
  4. mPtrFrame.setDurationToClose(200);  
  5. mPtrFrame.setDurationToCloseHeader(1000);  
  6. // default is false  
  7. mPtrFrame.setPullToRefresh(false);  
  8. // default is true  
  9. mPtrFrame.setKeepHeaderWhenRefresh(true);  
[java] view plain copy
在CODE上查看代码片 派生到我的代码片
  1. 刷新时,保持内容不动,仅头部下移, setPinContent()  

下拉刷新功能接口,对下拉刷新功能的抽象,包含以下两个方法。

public void onRefreshBegin(final PtrFrameLayout frame)

刷新回调函数,用户在这里写自己的刷新功能实现,处理业务数据的刷新。

public boolean checkCanDoRefresh(final PtrFrameLayout frame, final View content, final View header)

判断是否可以下拉刷新。 UltraPTR 的 Content 可以包含任何内容,用户在这里判断决定是否可以下拉。
例如,如果 Content 是 TextView,则可以直接返回 true,表示可以下拉刷新。
如果 Content 是 ListView,当第一条在顶部时返回 true,表示可以下拉刷新。
如果 Content 是 ScrollView,当滑动到顶部时返回 true,表示可以刷新。

案例示例:此段代码在设置了rvView(RecycleView)相关配置之后之后进行设置即可,
  
  
[java] view plain copy
在CODE上查看代码片 派生到我的代码片
  1. mPtrFrame.setPtrHandler(new PtrHandler() {  
  2.            @Override  
  3.            public void onRefreshBegin(PtrFrameLayout frame) {  
  4.               // currentPage = 1;  
  5.              //  mPresenter.start(currentPage,type);  
  6.                mPtrFrame.refreshComplete();  
  7.                if(currentPage==1){  
  8.                    mDataList.clear();  
  9.                }  
  10.                mDataList.addAll(entity.getNewslist());  
  11.                mAdapter.notifyDataSetChanged();  
  12.            }  
  13.   
  14.            @Override  
  15.            public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {  
  16.                return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);  
  17.            }  
  18.        });  
  19.        mPtrFrame.setResistance(1.7f);  
  20.        mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);  
  21.        mPtrFrame.setDurationToClose(200);  
  22.        mPtrFrame.setDurationToCloseHeader(1000);  
  23.        // default is false  
  24.        mPtrFrame.setPullToRefresh(false);  
  25.        // default is true  
  26.        mPtrFrame.setKeepHeaderWhenRefresh(true);  
  27.        mPtrFrame.postDelayed(new Runnable() {  
  28.            @Override  
  29.            public void run() {  
  30.                mPtrFrame.autoRefresh();  
  31.            }  
  32.        }, 100);  

2、当下拉刷新中有 ViewPager 时,比如 ListView 上面加个 Banner 广告条,这时候其实是会有滑动冲突的,那么网上搜很多都说要重写 ViewPager 或者 PtrFrameLayout,而且大部分都是达不到效果的,其实细心的你可能会发现,PtrFrameLayout 已经提供好方法来解决这一问题了,只是我们平时比较容易忽略:

Q&A

好了,只需要这样就能解决冲突了:

ptrFrame.disableWhenHorizontalMove(true);


文/L_Xian(简书作者)
原文链接:http://www.jianshu.com/p/edb2cde8201a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值