一.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. mariadb master and salve configure

    mariadb master and salve configure 主从复制配置: master:192.168.8.200 salve:192.168.8.201 主服务器配置: 主服务器需要启动 ...

  2. np归纳总结(全)第一天

    1.概述 1.np.array()  # 将列表转换为数组 import numpy as np array = [1, 2, 3, 4, 5] array = np.array(array) 2.. ...

  3. 菜单与内容下拉jQuery

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

  4. Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError: NULL Error

    This means there is a version mismatch--most likely with spring classes. So make sure all your sprin ...

  5. LPCTSTR和LPTSTR和char *究竟有什么区别

    LPSTR = char* LPCSTR = const char* LPTSTR: 如果定义了UNICODE宏,那么LPTSTR = wchar_t*否则LPTSTR = char* LPCTSTR ...

  6. nginx 配置ajax跨域访问php接口

    在nginx.conf里面,找到server项,并在里面添加如下配置 location ~ \.php?($|/) { #try_files $uri =; #handel cosr by mao a ...

  7. grep 过滤.svn文件

    [grep 过滤.svn文件] 问题: 在repository搜索代码时,常常会搜索到.svn的代码,如果不想搜索.svn目录下的相关代码怎么办?    1.使用管道进行双层“过滤”,其中第二次gre ...

  8. 39. Combination Sum (Back-Track)

    Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...

  9. [leetcode]273. Integer to English Words 整数转英文单词

    Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...

  10. c语言二维数组与指针

    问题,以下输出的结果是什么,区别在于哪? void main() { ][] = { ,,,,,,,,,,, }; //输出的3个地址都一样,差别在哪? printf("\n%x" ...