一.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
//默认1000ms

5.刷新是保持头部: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 使用的更多相关文章

  1. [Android]下拉刷新控件RefreshableView的实现

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4172483.html 需求:自定义一个ViewGroup,实现 ...

  2. Android下拉刷新控件--PullToRefresh的简单使用

    Android中很多时候都会用到上下拉刷新,这是一个很常用的功能,Android的v4包中也为我们提供了一种原生的下拉刷新控件--SwipeRefreshLayout,可以用它实现一个简洁的刷新效果, ...

  3. android下拉刷新控件 android-pulltorefresh

    运行效果: 介绍:ListView.ViewPager.WevView.ExpandableListView.GridView.(Horizontal)ScrollView.Fragment上下左右拉 ...

  4. Android 下拉刷新控件Android-PullToRefresh

    需要用到一个开源库 Android-PullToRefresh https://github.com/chrisbanes/Android-PullToRefresh ---------------- ...

  5. android官方下拉刷新控件SwipeRefreshLayout的使用

    可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只 ...

  6. android SwipeRefreshLayout google官方下拉刷新控件

    下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍 SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单 今天就来使用下SwipeRefres ...

  7. Android PullToRefresh下拉刷新控件的简单使用

    PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...

  8. Android SwipeRefreshLayout 官方下拉刷新控件介绍

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...

  9. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件

    前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤 ...

随机推荐

  1. 智能家居入门DIY——【七、添加一个LCD12864吧】

    今天加了一个LCD12864,IC看说明上是ST7567,结果一顿U8g2,发现两个问题: 1.买的时候不知道是卖家写的我理解错了还是怎么了,反正是不出汉字的. 2.U8g2太大了…………占了uno的 ...

  2. vs2015 去除 git 源代码 绑定

    第一次碰到这个问题,想将源代码签入TFS管理.添加到源码管理后,默认添加到Git源码管理. 研究过后,发现: 1)删除框内文件 2)Vs2015->工具->选项->源代码管理-> ...

  3. bzoj4403 两个串

    Description 兔子们在玩两个串的游戏.给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现.注意T中可能有“?”字符,这个字符可以匹配任何字符. Input 两行两个字 ...

  4. LR-IE录制设置

    ie浏览器去掉启用第三方浏览器扩展,路径. ie浏览器-工具-internet选项-高级,在列表中找到“启用第三方浏览器扩展” 把钩去掉 .   启动loadrunner11,按键盘F4,在brows ...

  5. sysbench 参数

    1)插入指定条数的数据 --events=N limit for total number of events [0] --time=N limit for total execution time ...

  6. 去掉Linux尖锐的提示音

    新装CentOS7,Tab键没有结果的时候,总是有尖锐的提示音,下面是如何去除这个提示音: # /etc/inputrc 找到 ‘#set bell-style none’,去掉注释# # reboo ...

  7. echarts地图扩展文件使用geoJson格式。

    echarts地图扩展文件使用geoJson格式. 1.在线生成 http://ecomfe.github.io/echarts-map-tool/  这里可以生成省市区的json,但是最多生成到”区 ...

  8. (翻译)React Container Components

    原文:Container Components Container Components 在 React 模式上对我的代码有最深远影响的一个模式叫 container component 模式. 在 ...

  9. 搜索框请输入关键字 onfocus 和 onblur

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Mysql 性能分析 Explain

    Mysql Query Optmize: 查询优化器, SQL语句会给Query Optimize他会执行他认为最优的方式.. Mysql 常见问题 CPU饱和,IO磁盘发生在装入数据大于内存时. E ...