高斋晓开卷,独共圣人语。这篇文章主要讲述Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用相关的知识,希望能为你提供帮助。
一.gitHub地址及介绍https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh
android-Ultra-Pull-To-Refresh (简称 UltraPTR )是一个强大的 Andriod 下拉刷新框架。 1.继承自ViewGroup,Content可以包含任何View; 2.简洁完善的Header抽象,方便进行扩展,构建满足需求的Header;对比于Android-PullToRefresh 来说,UltraPTR没有实现上拉加载,作者认为上拉加载于下拉刷新不是同一个层次的功能,上拉加载应该交由Content自己去实现;Googgle官方的SwipeRefreshLayout也是这样认为的,对比SwipeRefreshLayout,UltraPTR更加灵活,更容易扩展。UltraPTR首先抽象出两个接口,功能接口和UI接口 PtrHandler代表下拉刷新的功能接口,包含刷新功能回调方法以及判断是否可以下拉的方法,用户实现此接口来进行数据刷新工作。 PtrUIHandler代表下拉刷新的UI接口,包含准备下拉、下拉中、下拉完成、下拉重置以及下拉过程中的位置变化等回调方法。通常情况下,Header需要实现此接口,来处理下拉刷新过程中头部UI的变化。整个项目围绕核心类PtrFrameLayout。 PtrFrameLayout代表了一个下拉刷新的自定义控件。 PtrFrameLayout继承自ViewGroup,有且只能有两个子View,头部Header和内容Content。通常情况下,Header会实现PtrUIHandler接口,Content可以为任意的View。 和所有的自定义控件一样,PtrFrameLayout通过重写onFinishInflate、onMeasure、onLayout来确定控件的大小和位置,通过重写dispatchTouchEvent来确定控件的下拉行为。
二.6个配置参数
1.阻尼系数:Resistancexml文件中设置
//默认: 1.7f,越大,感觉下拉时越吃力。
2.触发刷新时移动的位置比例:RatioOfHeaderHeightToRefresh
//默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。
3.回弹延时:DurationToClose
//默认 200ms,回弹到刷新高度所用时间
4.头部回弹时间:DurationToCloseHeader
//默认1000ms
5.刷新是保持头部:KeepHeaderWhenRefresh
//默认值 true.
6.下拉刷新 / 释放刷新:PullToRefresh
//默认为释放刷新,默认false
< in.srain.cube.views.ptr.PtrFrameLayout android:id="@+id/ptrFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:ptr_resistance="1.7" app:ptr_ratio_of_header_height_to_refresh="1.2" app:ptr_duration_to_close="300" app:ptr_duration_to_close_header="300" app:ptr_keep_header_when_refresh="true" app:ptr_pull_to_fresh="false" > < LinearLayout android:id="@+id/store_house_ptr_image_content" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:padding="10dp"> < ImageView android:id="@+id/img" android:layout_width="match_parent" android:layout_height="match_parent" android:src="https://www.songbingjia.com/android/@mipmap/p5" /> < /LinearLayout> < /in.srain.cube.views.ptr.PtrFrameLayout>
java代码设置
ptrFrame.setResistance(1.7f); ptrFrame.setRatioOfHeaderHeightToRefresh(1.2f); ptrFrame.setDurationToClose(200); ptrFrame.setDurationToCloseHeader(1000); ptrFrame.setPullToRefresh(false); ptrFrame.setKeepHeaderWhenRefresh(true);
三、头部风格1.StoreHoseHeader
storeHouseHeader=new StoreHouseHeader(this); storeHouseHeader.setBackgroundColor(Color.GRAY); storeHouseHeader.setTextColor(Color.RED); storeHouseHeader.setLineWidth(4); storeHouseHeader.initWithString("update");
2. MeterialHeader
materialHeader = new MaterialHeader(this); materialHeader.setColorSchemeColors(new int[]{Color.RED, Color.GREEN, Color.BLUE});
3.PtrClassicDefaultHeader
ptrClassicDefaultHeader = new PtrClassicDefaultHeader(this);
四、代码实战 xml文件:
< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" > < in.srain.cube.views.ptr.PtrFrameLayout android:id="@+id/ptrFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:ptr_resistance="1.7" app:ptr_ratio_of_header_height_to_refresh="1.2" app:ptr_duration_to_close="300" app:ptr_duration_to_close_header="300" app:ptr_keep_header_when_refresh="true" app:ptr_pull_to_fresh="false" > < LinearLayout android:id="@+id/store_house_ptr_image_content" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" android:padding="10dp"> < ImageView android:id="@+id/img" android:layout_width="match_parent" android:layout_height="match_parent" android:src="https://www.songbingjia.com/android/@mipmap/p5" /> < /LinearLayout> < /in.srain.cube.views.ptr.PtrFrameLayout> < /RelativeLayout>
2.activity
public class TestActivity extends BaseActivity {private PtrFrameLayout ptrFrame; private ImageView img; private StoreHouseHeader storeHouseHeader; private MaterialHeader materialHeader; private PtrClassicDefaultHeader ptrClassicDefaultHeader; @Override protected void initView() { ptrFrame=findViewById(R.id.ptrFragment); img=findViewById(R.id.img); initPtrFm(); }private void initPtrFm() {//1. 设置头部 initHeaders(); //2.添加头部 ptrFrame.setHeaderView(materialHeader); //3.处理下拉刷新过程头部UI的变化 ptrFrame.addPtrUIHandler(materialHeader); //4.判断是否可以下拉,数据刷新工作 ptrFrame.setPtrHandler(new PtrHandler() { @Override public void onRefreshBegin(PtrFrameLayout frame) { frame.postDelayed(new Runnable() { @Override public void run() { img.setImageResource(R.mipmap.p2); ptrFrame.refreshComplete(); } }, 3000); }@Override public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) { // 默认实现,根据实际情况做改动 return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header); } }); }private void initHeaders() { /** * //第一种头部 * StoreHouse风格的头部实现 */storeHouseHeader=new StoreHouseHeader(this); storeHouseHeader.setBackgroundColor(Color.GRAY); storeHouseHeader.setTextColor(Color.RED); storeHouseHeader.setLineWidth(4); storeHouseHeader.initWithString("update"); //storeHouseHeader.initWithString("lastupdatetime "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); //"last update @" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())/** * //第二种头部 * Material Design风格的头部实现 */ materialHeader = new MaterialHeader(this); materialHeader.setColorSchemeColors(new int[]{Color.RED, Color.GREEN, Color.BLUE}); //类似SwipeRefreshLayout/** * //第三种头部 * 经典 风格的头部实现 */ ptrClassicDefaultHeader = new PtrClassicDefaultHeader(this); }@Override protected void initData() {}@Override protected int getLayoutId() { return R.layout.activity_test; } }
【Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用】
推荐阅读
- spring mvc 500错误Allocate exception for servlet AppService javax.naming.NamingException: Cannot creat
- Android-认识Bitmap
- spark中map与mapPartitions区别
- Android NDK MediaCodec在ijkplayer中的实践
- Android 9.0更新
- 朝花夕拾Android性能篇之Android进程管理机制
- android 开发设计模式---观察者模式
- webAPP 原生APP 对比
- android中Scrollview嵌套WebView问题