Android下拉刷新,SwipeRefreshLayout的使用

相信小伙伴在APP里面都使用过下拉刷新这个功能,像微信、QQ等各种APP都有下拉刷新这个功能,那么它究竟是如何实现的呢?来看看!

效果图先行:

可以看到图中,下拉刷新进行了事件处理,并且下拉刷新的样式比较漂亮(鲜艳。。。)
在这里插入图片描述

首先来看看XML布局文件

可以看到,SwipeRefreshLayout是一个根布局,然后里面具体放什么看你需求了!

<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swiprefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

        <TextView
            android:id="@+id/txv_refresh"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="这个是一个TtetView"
            android:textColor="@color/colorRed"
            android:textSize="22sp" />

        <Button
            android:id="@+id/btn_refresh"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="点击进行刷新" />

    </LinearLayout>
    
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
然后来看看JAVA后台代码(逐个解析)

首先是利用下拉刷新的监听回调实现了每次下拉刷新对TextView增加**“刷新了一下”的字样,为什么要设置1.5秒停止**呢,因为你如果不设置,那么刷新的小圈圈就会永不停歇的在那里转呀转~所以我们需要调用mSwiprefresh.setRefreshing(false);让它停下来!

//SwipeRefreshLayout的下拉刷新监听回调
        mSwiprefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                //每次刷新都给TextView加上一段文字
                mTxvRefresh.setText(mTxvRefresh.getText().toString()+"刷新了一次");
                //这里设置1.5秒后停止
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (mSwiprefresh.isRefreshing()){
                            mSwiprefresh.setRefreshing(false);
                        }
                    }
                },1500);
            }
        });

紧接着,是按钮的点击也触发了刷新,但是细心的朋友会发现效果图中,点击按钮刷新完以后,TextView并没有像之前那样增加**“刷新了一下”**的字样!这就是下拉刷新和调用mSwiprefresh.setRefreshing(true);方法进行刷新的区别了!

         //这里设置点击按钮进行刷新动作(不需要下滑)
        //不会执行上面的监听回调里面的方法
        mBtnRefresh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置SwipeRefreshLayout的状态
                mSwiprefresh.setRefreshing(true);
                //这里设置1.5秒后停止
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (mSwiprefresh.isRefreshing()){
                            mSwiprefresh.setRefreshing(false);
                        }
                    }
                },1500);
            }
        });

最后是关于SwipeRefreshLayout样式的两个设置,以及刷新的触发距离,这里说一下设置刷新圆球里面线条的颜色集,线条转一圈是1秒的时间,所以说,如果你不准备让它转很久,那你设置太多颜色也是白费!

       //设置触发下拉刷新的滑动距离
        mSwiprefresh.setDistanceToTriggerSync(100);
        //设置刷新圆球的背景颜色
        mSwiprefresh.setProgressBackgroundColorSchemeColor(Color.YELLOW);
        //设置圆球里面转圈圈线条的颜色集 下拉时是第一个颜色,后面是转一圈换一个颜色
        mSwiprefresh.setColorSchemeColors(new int[]{Color.RED,Color.BLUE});

如果小伙伴们有什么不懂的,可以下方评论区留言,我会第一时间尽我所能地答复你!

发布了40 篇原创文章 · 获赞 295 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_44720366/article/details/105000748