下拉刷新PtrFrameLayout组件的使用

一、前言

    app中经常会用到下拉刷新的功能,有人通过重写listview实现,当下拉到listview的顶部的时候,显示出加载的view,至于加载的view慢慢显示,可以不同的改变view的padding达到效果,但是这种实现方式有很大的限制,所以PtrFrameLayout你值得拥有。

二、使用

0、在项目gradle文件中引用:

compile 'in.srain.cube:ultra-ptr:1.0.11'

1、布局文件

<?xml version="1.0" encoding="utf-8"?>
<in.srain.cube.views.ptr.PtrFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/framelayout"
    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="200"
    app:ptr_duration_to_close_header="300"
    app:ptr_keep_header_when_refresh="true"
    app:ptr_pull_to_fresh="false">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="#33ff0000">
        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:text="hello world"/>
    </LinearLayout>

</in.srain.cube.views.ptr.PtrFrameLayout>
其中:

app:ptr_resistance="1.7":设置下拉的阻尼系数,值越大感觉越难下拉

ptr_ratio_of_header_height_to_refresh:设置超过头部的多少时,释放可以执行刷新操作

ptr_duration_to_close:设置下拉回弹的时间

ptr_duration_to_close_header:设置刷新完成,头部回弹时间,注意和前一个进行区别

ptr_keep_header_when_refresh:设置刷新的时候是否保持头部

ptr_pull_to_fresh:设置下拉过程中执行刷新,我们一般设置为false

当然这几个参数的设置也可以通过代码去实现:

// the following are default settings
mPtrFrame.setResistance(1.7f);
mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
mPtrFrame.setDurationToClose(200);
mPtrFrame.setDurationToCloseHeader(1000);
// default is false
mPtrFrame.setPullToRefresh(false);
// default is true
mPtrFrame.setKeepHeaderWhenRefresh(true);
2、java代码设置

    在代码中,如果想要下拉刷新功能很简单,只要简单的三步就OK:

1)设置setPtrHandler:主要是为了判断是否可以刷新(考虑到有AbsListView等滑动view的情况)以及设置刷新前的设置:

mPtrFrameLayout.setPtrHandler(new PtrHandler() {
    @Override
    public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
        /**
         *检查是否可以刷新,这里使用默认的PtrHandler进行判断
         */
        return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
    } 

    @Override
    public void onRefreshBegin(PtrFrameLayout frame) {
        /**
         * 在刷新前需要准备什么工作
         */
        Log.i("wrx144", "id = "+ getThreadId());
        mTextView.setText("loading...");
        new MyAsyncTask().execute();
    }
});
2)设置PtrUIHandler,通过addPtrUIHandler为PtrFrameLayout设置PtrUIHandler,此设置主要是控制下拉时UI变化,当然,所引用的第三方库有写好的PtrUIHandler:

PtrClassicDefaultHeader header = new PtrClassicDefaultHeader(this);
mPtrFrameLayout.addPtrUIHandler(header);
PtrClassicDefaultHeader 既是PtrUIHandler也是View

3)设置HeaderView,通过setHeaderView,此第三方库也是包含写好的view的;PtrClassicDefaultHeader 就是其中一个了

通过以上三步,就可以使用这个强大的下拉功能啦!

3、设置下拉过程中,content的内容布局保持不动

public void setPinContent(boolean pinContent)



参考:android-Ultra-Pull-To-Refresh 源码解析


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值