Ultra-Pull-To-Refresh超简单终极实现下拉刷新、上拉加载 入门实现(一)

前言

搞不定这个nb的框架实在是如鲠在喉。请沉下心读完,我保你能实现用。
能开始写这一篇文章实在是“山穷水复疑无路,柳暗花明又一村”。
参考了好多前辈的文章,心力憔悴的难受。首先感谢他们能教会我使用这个框架,其次是,网上博客很多,质量参差不齐,对于我这种初学者,难度很大———主要是因为我水平不够,github上的原码也搞不懂,只能寄希望于网络帖子。

话不多说了,开搞。

一、引入jar包

由于这个jar支持下拉刷新和上拉加载两种功能,也可以设置单独一种。所以那个只支持下拉刷新的就不说了。原理一样。

compile 'in.srain.cube:ptr-load-more:1.0.6'

二、xml布局

<?xml version="1.0" encoding="utf-8"?>
<in.srain.cube.views.ptr.PtrFrameLayout
    android:id="@+id/ptr_frame_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"

    cube_ptr:ptr_resistance_header="1.7"
    cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
    cube_ptr:ptr_duration_to_back_header="300"
    cube_ptr:ptr_duration_to_close_header="2000"
    cube_ptr:ptr_keep_header_when_refresh="true"
    cube_ptr:ptr_pull_to_fresh="false"

    cube_ptr:ptr_resistance_footer="1.3"
    cube_ptr:ptr_duration_to_back_footer="300"
    cube_ptr:ptr_duration_to_close_footer="2000">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorAccent"
            android:gravity="center"
            android:text="textView"/>
    </LinearLayout>
</in.srain.cube.views.ptr.PtrFrameLayout>

in.srain.cube.views.ptr.PtrFrameLayout可以包含任意控件、布局
解析xml内的参数:

参数释义
ptr_resistance_headerheader阻尼系数。默认: 1.7f,越大,感觉下拉刷新时越吃力
ptr_resistance_footerfooter阻尼系数。默认: 1.7f,越大,感觉上拉加载时越吃力
ptr_ratio_of_header_height_to_refresh触发刷新时移动的位置比例。默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。下拉刷新,上拉加载都一样
ptr_duration_to_back_header过度向下拉扯刷新高度,回弹到刷新正常高度时间,默认200ms
ptr_duration_to_back_footer过度向上拉扯加载高度,回弹到加载正常高度时间
ptr_duration_to_close_header刷新完成后,关闭header时间
ptr_duration_to_close_footer加载完成后,关闭footer时间
ptr_keep_header_when_refresh刷新是保持头部,也就是显示头部。默认值 true。false:隐藏头部
ptr_pull_to_fresh下拉刷新 / 释放刷新。 默认为释放的时候刷新

可以在xml内设置,也可以在java代码中设置:

final PtrFrameLayout ptrFrameLayout = findViewById(R.id.ptr_frame_layout);
//配置头部参数,可以在xml中设置
// the following are default settings
    ptrFrameLayout.setResistance(1.7f);
    ptrFrameLayout.setRatioOfHeaderHeightToRefresh(1.2f);
    ptrFrameLayout.setDurationToClose(200);
    ptrFrameLayout.setDurationToCloseHeader(1000);
// default is false
    ptrFrameLayout.setPullToRefresh(false);
// default is true
    ptrFrameLayout.setKeepHeaderWhenRefresh(true);

这里也不全,可以类推补充。

三、Activity编写

public class MainActivity extends AppCompatActivity {

    private PtrFrameLayout ptrFrameLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {

        ptrFrameLayout = (PtrFrameLayout) findViewById(R.id.ptr_frame_layout);

        //第一种头部,StoreHouse风格的头部实现
    /*StoreHouseHeader storeHouseHeader = new StoreHouseHeader(this);
    storeHouseHeader.setPadding(0,100,0,0);
    storeHouseHeader.setBackgroundColor(Color.BLACK);
    storeHouseHeader.setTextColor(Color.WHITE);
    storeHouseHeader.initWithString("adidasi");//只可英文,中文不可运行(添加时间)
    ptrFrameLayout.setHeaderView(storeHouseHeader);
    ptrFrameLayout.addPtrUIHandler(storeHouseHeader);*/

        //第二种头部,Material Design风格的头部实现,类似SwipeRefreshLayout
    /*MaterialHeader materialHeader = new MaterialHeader(this);
    materialHeader.setColorSchemeColors(new int[]{Color.RED, Color.GREEN, Color.BLUE});
    ptrFrameLayout.setHeaderView(materialHeader);
    ptrFrameLayout.addPtrUIHandler(materialHeader);*/


        //第三种头部,经典 风格的头部实现,下拉箭头+时间,,下拉刷新
        //定义下拉刷新样式
        PtrClassicDefaultHeader ptrClassicDefaultHeader = new PtrClassicDefaultHeader(this);
        //添加到顶部
        ptrFrameLayout.setHeaderView(ptrClassicDefaultHeader);
        //添加到布局中
        ptrFrameLayout.addPtrUIHandler(ptrClassicDefaultHeader);

        //上拉加载
        //定义上拉加载样式
        PtrClassicDefaultFooter ptrClassicDefaultFooter = new PtrClassicDefaultFooter(this);
        //为加载添加布局样式
        ptrFrameLayout.setFooterView(ptrClassicDefaultFooter);
        //添加到布局中
        ptrFrameLayout.addPtrUIHandler(ptrClassicDefaultFooter);
        //监听
        ptrFrameLayout.setPtrHandler(new PtrDefaultHandler2() {
            //加载更多监听
            @Override
            public void onLoadMoreBegin(PtrFrameLayout frame) {

                ptrFrameLayout.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "刷新结束", Toast.LENGTH_SHORT).show();
                        //完成加载,隐藏布局
                        ptrFrameLayout.refreshComplete();
                    }
                },1000);

            }
            //下拉刷新监听
            @Override
            public void onRefreshBegin(PtrFrameLayout frame) {
                ptrFrameLayout.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "加载结束", Toast.LENGTH_SHORT).show();
                        //结束刷新,隐藏布局
                        ptrFrameLayout.refreshComplete();
                    }
                },1000);

            }
        });
        //设置模式
        //BOTH:下拉刷新,下拉加载
        //NONE:都不监听
        //LOAD_MORE:只有下拉加载
        //REFRESH:只有下拉刷新
        ptrFrameLayout.setMode(PtrFrameLayout.Mode.BOTH);
    }
}

总结

代码内注释很明确了,如果哪里不明白可以留言。
只需要这三步就可以了,也很简单,却让我这个初学的人很蛋疼。
这三种方式对要求不高的勉强可以用,但是经常需要一些自定义动画,这个框架的强大之处就在于这里。下一篇我将搞一个自己定义的简单动画刷新Ultral-pull-to-refresh自定义动画刷新效果(二)。有什么不对的欢迎指出,谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值