相信小伙伴在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});
如果小伙伴们有什么不懂的,可以下方评论区留言,我会第一时间尽我所能地答复你!