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
//默认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;
    }
}

  

原文地址:https://www.cnblogs.com/wangjiaghe/p/9846730.html

时间: 2025-02-01 14:35:11

Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用的相关文章

Android 下拉刷新控件SwipeRefreshLayout结合WebView使用

SwipeRefreshLayout 是谷歌官方下拉刷新控件,4.0以下的版本需要用到  android-support-v4.jar包才能用到 android-support-v4.jar 包下载地址:http://download.csdn.net/detail/h7870181/7784247 官网API地址:https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html G

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

需求:自定义一个ViewGroup,实现可以下拉刷新的功能.下拉一定距离后(下拉时显示的界面可以自定义任何复杂的界面)释放手指可以回调刷新的功能,用户处理完刷新的内容后,可以调用方法onCompleteRefresh()通知刷新完毕,然后回归正常状态.效果如下:     源代码:RefreshableView(https://github.com/wangjiegulu/RefreshableView) 分析: 我们的目的是不管什么控件,只要在xml中外面包一层标签,那这个标签下面的所有子标签所

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

Android中很多时候都会用到上下拉刷新,这是一个很常用的功能,Android的v4包中也为我们提供了一种原生的下拉刷新控件--SwipeRefreshLayout,可以用它实现一个简洁的刷新效果,但今天我们的主角并不是它,而是一个很火的第三方的上下拉刷新控件--PullToRefresh.PullToRefresh包括PullToRefreshScrollView.PullToRefreshListView.PullToRefreshGridView等等很多为我们提供的控件,我们可以在xml

Android下拉刷新控件SwipeRefreshLayout源码浅析

SwipeRefreshLayout是Android官方的下拉刷新控件,使用简单,界面美观,不熟悉的朋友可以随便搜索了解一下,这里就不废话了,直接进入正题. 这种下拉刷新控件的原理不难,基本就是监听手指的运动,获取手指的坐标,通过计算判断出是哪种操作,然后就是回调相应的接口了.SwipeRefreshLayout是继承自ViewGroup的,根据Android的事件分发机制,触摸事件应该是先传递到ViewGroup,根据onInterceptTouchEvent的返回值决定是否拦截事件的,那么就

android下拉刷新控件之第三方开源控件的使用实现

本次使用的第三方下拉刷新控件是:Android-Pull-Refresh,下载地址:https://github.com/chrisbanes/Android-PullToRefresh 该控件适用于: ViewPager HorizontalScrollView ScrollView WebView GridView ListView ExpandableListView ListFragment 从github上下载解压后,将library,PullToRefreshListFragment

Android 下拉刷新控件的使用

activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android 解决下拉刷新控件和ScrollVIew的滑动冲突问题。

最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择了它,而且让RecyleView实现了可拖拽的效果, 最后我再加上了下拉刷新的效果(这里我用的下拉刷新控件是三方的SmartRefreshLayout).记得刚开始实现这个效果的时候还是十分的得心印手.可是当我测试的时候,发现RecyleView的子item的拖拽效果并不流畅,起初我以 为是由于Re

Android——谷歌官方下拉刷新控件SwipeRefreshLayout(转)

转自:http://blog.csdn.net/zouzhigang96/article/details/50476402 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言: 如今谷歌推出了更官方的下拉刷新控件, 这无疑是对安卓开发人员来说是个好消息,很方便的使用这个SwipeRefreshLayout控件实现下拉刷新功能.Android4.0以下的版本需要用到 Android-support-v4.jar包才能用到 android-support-v4.jar 包下载地址:http:

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

前言: 因为公司人员变动原因,导致了博主四个月没有动安卓,一直在做IOS开发,如今接近年前,终于可以花一定的时间放在安卓上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤较多,所以今天博主要实现以上效果的第一步——打造一个通用的下拉刷新控件,具体效果如下: GIF图片比较大,还希望读者能耐心等待一下下从效果图中可以看出,我们的下拉刷新的滑动还是很流畅的,可能大多数开发者用的是XListview或者PullTo