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.阻尼系数:Resistance
//默认: 1.7f,越大,感觉下拉时越吃力。2.触发刷新时移动的位置比例:RatioOfHeaderHeightToRefresh
//默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。3.回弹延时:DurationToClose
//默认 200ms,回弹到刷新高度所用时间4.头部回弹时间:DurationToCloseHeader
//默认1000ms5.刷新是保持头部:KeepHeaderWhenRefresh
//默认值 true.6.下拉刷新 / 释放刷新:PullToRefresh
//默认为释放刷新,默认false
xml文件中设置
<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="@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="@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("last updatetime "+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 使用的更多相关文章
- [Android]下拉刷新控件RefreshableView的实现
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4172483.html 需求:自定义一个ViewGroup,实现 ...
- Android下拉刷新控件--PullToRefresh的简单使用
Android中很多时候都会用到上下拉刷新,这是一个很常用的功能,Android的v4包中也为我们提供了一种原生的下拉刷新控件--SwipeRefreshLayout,可以用它实现一个简洁的刷新效果, ...
- android下拉刷新控件 android-pulltorefresh
运行效果: 介绍:ListView.ViewPager.WevView.ExpandableListView.GridView.(Horizontal)ScrollView.Fragment上下左右拉 ...
- Android 下拉刷新控件Android-PullToRefresh
需要用到一个开源库 Android-PullToRefresh https://github.com/chrisbanes/Android-PullToRefresh ---------------- ...
- android官方下拉刷新控件SwipeRefreshLayout的使用
可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只 ...
- android SwipeRefreshLayout google官方下拉刷新控件
下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍 SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单 今天就来使用下SwipeRefres ...
- Android PullToRefresh下拉刷新控件的简单使用
PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...
- Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果: 因为此效果实现的步骤 ...
随机推荐
- 单链表LRU
单链表实现lru 越靠近链表尾部的节点是越早之前访问的 当有一个新的数据被访问时,从链表头开始顺序遍历链表 1.如果此数据之前已经被缓存在链表中 遍历得到这个数据对应的节点,并将其从原来的位置删除,然 ...
- Linux嵌入式内核模块程序设计
1.环境搭建 vmware+Fedora 2.创建一个Hello文件 [root@localhost ~]# mkdir Hello 3.在Hello里面创建 hello.c 和 Makefile 两 ...
- Bootstrap-CL:列表组
ylbtech-Bootstrap-CL:列表组 1.返回顶部 1. Bootstrap 列表组 本章我们将讲解列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: ...
- yaml语言教程
大家直接去看阮一峰的教程. http://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt 简介 基本语法规则: 大小写敏感 使用缩进表示层级关系 缩进时不 ...
- [置顶]
linux c常用函数 (待完善)
(1)字符测试函数 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii(测试字符是否为ASCII码字符) isblank(测试字符是否为空格字符) ...
- Linux(Centos)安装配置SVN服务器
1. 安装SVN服务器: 检查是否已安装 # rpm -qa subversion 安装SVN服务器 # yum install httpd httpd-devel subversion mod_da ...
- css踩过的坑
1. 英文内容会撑破容器而中文内容是可以自动换行的 原因: 因为数学规则因素,中文韩文朝鲜文等可以在任何字之后断行的,而英文却不能把一个单词拆开换行,只能撑破容器 解决: 用word-break: b ...
- pycharm中使用redis模块入门
数据缓存系统:1:mongodb:是直接持久化,直接存储于硬盘的缓存系统2:redis: 半持久化,存储于内存和硬盘3:memcache:数据只能存储在内存里的缓存系统 redis是一个key-val ...
- params over length limit is 20
- 关于TP5中的依赖注入和容器和facade
看了不少的文章,也看了官方的介绍,还是根据自己的理解,写写看法,理清下思路 只是单纯的说依赖注入Dependency Injection和容器 别的不白扯 比如有A,B,C三个类 A类的1方法依赖B类 ...