SwipeRefresh 各种实现上拉,下拉刷新

CoordinatorLayoutt +SwipeRefresh实现刷新加载多标签的咨询页 用CoordinatorLayout+Appbarlayout+SwipeRefresh实现可以刷新加载的新闻咨询页 阅读详情

http://blog.youkuaiyun.com/imshuyuan/article/details/62041447


基于原生的SwipeRefreshLayout 做了封装处理

项目源码 
https://github.com/huangshuyuan/SwipeRefresh

此项目中包括三种:

  • 1.原生SwipeRefreshLayout(上拉可通过滚动监听实现)

  • 2.自定义支持上拉刷新的组件

  • 3.自定义支持ViewPage的刷新组件VPSwipeRefreshLayout

主界面

下拉刷新

上拉刷新

支持viewpager刷新


1.原生SwipeRefreshLayout(上拉可通过滚动监听实现)

除了OnRefreshListener接口外,SwipRefreshLayout中还有一些其他重要的方法,具体如下:


         1、setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener):设置手势滑动监听器。

         2、setProgressBackgroundColor(int colorRes):设置进度圈的背景色。

         3、setColorSchemeResources(int… colorResIds):设置进度动画的颜色。

         4、setRefreshing(Boolean refreshing):设置组件的刷洗状态。

         5、setSize(int size):设置进度圈的大小,只有两个值:DEFAULT、LARGE

 ```

 布局,具体内容如下:
 ```
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/swipeLayout" >

    <ListView 
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</android.support.v4.widget.SwipeRefreshLayout>
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

Activity核心代码如下:

swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeLayout);
  /*加载的渐变动画*/
        swipeRefreshLayout.setColorSchemeResources(R.color.swipe_color_1,
                R.color.swipe_color_2,
                R.color.swipe_color_3,
                R.color.swipe_color_4);
        swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);;
        swipeRefreshLayout.setProgressBackgroundColor(R.color.swipe_background_color);
        //swipeRefreshLayout.setPadding(20, 20, 20, 20);
        //swipeRefreshLayout.setProgressViewOffset(true, 100, 200);
        //swipeRefreshLayout.setDistanceToTriggerSync(50);
        swipeRefreshLayout.setProgressViewEndTarget(true, 100);
        swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        data.clear();
                        for(int i=0;i<20;i++){
                            data.add("SwipeRefreshLayout下拉刷新"+i);
                        }
                        try {
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        mHandler.sendEmptyMessage(1);
                    }
                }).start();
            }
        });
    //handler
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 1:

                swipeRefreshLayout.setRefreshing(false);
                adapter.notifyDataSetChanged();
                //swipeRefreshLayout.setEnabled(false);
                break;
            default:
                break;
            }
        }
    };

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 原生实现上拉效果

通过监听滚动事件,对listview添加底部的组件实现上拉

 implements AbsListView.OnScrollListener {···


 ···
  /**
         * 对listview添加底部的组件实现上拉
         */
        footerView = getLayoutInflater().inflate(R.layout.refresh_footview_layout, null);
        lv.addFooterView(footerView);
  /**
         * 设置滚动监听
         */
   lv.setOnScrollListener(this);

    /**
     * 重写滚动方法
     * @param view
     * @param scrollState
     */
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        if (adapter.getCount() == visibleLastIndex && scrollState == SCROLL_STATE_IDLE) {
            Toast.makeText(this, "加载更多完成", Toast.LENGTH_SHORT).show();
            footerView.setVisibility(View.GONE);
            /*在此处加载更多数据*/
//            new LoadDataThread().start();
        }else {
            footerView.setVisibility(View.VISIBLE);
//            Toast.makeText(this, "加载更多...", Toast.LENGTH_SHORT).show();
        }

    }

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33



Android下拉刷新与上拉加载实现指南 下拉刷新和上拉加载是移动端列表交互的核心功能,通过手势触发数据更新机制提升用户体验。从技术原理看,下拉刷新通过监听滑动距离阈值触发数据请求,而上拉加载则在滚动到底部时自动加载。在Android开发中,可通过SwipeRefreshLayout原生组件或Jetpack Compose的PullToRefreshBox实现,同时需要处理性能优化如节流控制和网络状态管理。这些技术广泛应用于社交feed流、电商商品列表等场景,是提升移动应用流畅度的关键实践。 阅读详情

相关推荐

Android Jetpack Compose Paging+SwipeRefresh实现分页和下拉刷新

interface RetrofitService { @GET(“getContent”) suspend fun getContentByTitle(@Query(“page”) page: Int, @Query(“title”) title: String): AgResponse<List> } 定义PagingSource class ContentPageSource(val title: String, private val mService: RetrofitService)

m0_64319298的博客 576

Android控件十三:SwipeRefreshLayout实现上拉加载和下拉刷新

SwipeRefreshLayout实现上拉加载和下拉刷新 原文:https://www.cnblogs.com/liunanjava/p/5860024.html 实例一:下拉刷新和上拉刷新都用SwipeRefreshLayout自带的进度条(默认上拉刷新没有效果) 代码实现: layout/activity_main.xml <?xml version="1.0" encoding=...

zk的博客 4730

Android UI开发第二十一篇——下拉刷新列表实现(pull to refresh)

Android UI开发第二十一篇——下拉刷新列表实现(pull to refresh) http://blog.youkuaiyun.com/xyz_lmn/article/details/8101360

android下拉刷新——swipeRefresh的使用,入职3个月的Android程序员面临转正

考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档,如果有需要的朋友可以私信我【面试】免费领取点击这里领取Android面试资料汇总和一些面试资料做成了PDF文档,如果有需要的朋友可以私信我【面试】免费领取点击这里领取Android面试资料汇总[外链图片转存中…(img-AlST3NtJ-1711325058787)][外链图片转存中…(img-ZGmcbNhY-1711325058788)]

m0_60229361的博客 893

SwipeRefreshView实现下拉刷新,上拉加载并实现条目点击事件

1。自定义View继承SwipeRefreshLayout,添加上拉加载更多的布局属性 2。实现SwipeRefreshLayout包含条目中点击事件监听

JAVA + 海康威视SDK + FFmpeg+ SRS 实现海康威视摄像头二次开发

海康威视SDK接入方案摘要 本文介绍了使用海康威视官方SDK开发物联网平台摄像头接入功能的完整方案。系统采用Java后端集成HCNetSDK控制摄像头,通过FFmpeg将RTSP流转为RTMP推送到SRS流媒体服务器,前端基于HTTP-FLV协议实现视频播放。文章详细说明了开发准备工作,包括SDK下载、SRS部署、FFmpeg安装等关键步骤,并提供了数据库表设计和接口定义。核心部分展示了如何集成海康SDK,包括提取必要代码、加载DLL文件、配置打包插件等具体实现细节,最终形成了一套支持实时预览、回放和下载的

2401_83057947的博客 2261

android下拉刷新——swipeRefresh的使用

效果展示 简介 SwipRefreshLayout是谷歌前一段时间推出的一款下拉刷新控件。 常用方法 方法 解释 setColorSchemeResources(int…colorReslds) 设置下拉进度条的颜色主题,参数可变,并且是资源id,最多设置四种不同的颜色。 setProgressBackgroundSchemeResource(int coloRes) 设置下拉进度条的背景颜色,默认白色。 isRefreshing() 判断当前的状态是否是刷新

我想月薪过万的博客 6167

从Mate到Mate40 Pro+:华为旗舰核心配置演进与选购避坑指南

本文回顾了华为Mate系列从初代到Mate40 Pro+的核心配置演进历程,重点分析了处理器性能、影像系统、屏幕设计及续航快充的技术突破。针对选购需求,提供了区分版本、5G选择及存储配置的实用避坑建议,帮助消费者明智选择华为旗舰机型。

weixin_30015371的博客 494

android 官方上拉,SwipeRefresh

SwipeRefreshLayout详解和自定义加载更多本文重点介绍了SwipeRefreshLayout的使用和自定View继承SwipeRefreshLayout添加上拉加载更多的功能。介绍之前,先来看一下SwipeRefreshLayout实现的下拉刷新效果图。从图中可以看到,下拉到了一定的高度才会进行刷新,高度不够就会回收上去,正在刷新过程中,继续下拉没反应,说明刷新时屏蔽掉了下拉事件。一...

weixin_29500837的博客 467

如何通过CAD图中的坐标来确定是哪个坐标系

地理坐标系:为球面坐标。参考平面地是椭球面,坐标单位:经纬度。以地球参考为例,坐标系就相当于整个地球,而地理坐标系就是椭球状的完整的立体地球。所以我们可以看到生活中的数据与地图是一定含有地理坐标系的,因为他是客观上来说确确实实存在的。投影坐标系:为平面坐标。参考平面地是水平面,坐标单位:米、千米等。这就相当于把地球当成一个橘子,然后一刀切开,把橘子皮平面铺开,这个过程就是地理投影的过程。严谨一点来说就是建立一个参考系统,按照对应位置把椭球体投射到平面。那坐标系统主要有那些呢?北京54。

vjmap的博客 2万+

kettle多表数据迁移

点击 文件——新建——作业,在左侧的 核心对象 标签下选择 通用,双击添加一个 start ,一个 转换 ,一个 作业 和一个 成功 到右侧的作业面板,这些作业项都可以改名字。点击文件—新建—转换,在左侧的 核心对象 标签下选择 输入 下的 表输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。新建转换,在左侧的 核心对象 标签下选择 作业 下的 从结果获取记录,双击添加到右侧的转换面板,再选择 作业 下的 设置变量 ,双击添加到右侧的转换面板。

u014061745的博客 1340

Android Compose list 下拉刷新、上拉加载更多

使用compose+swipeRefresh+paging 实现列表的Demo

ange_li的博客 767

Qt实现YOLO目标检测及其界面制作(附完整源码)

Qt实现YOLO目标检测及其界面制作(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2738

Android Compose实现下拉刷新 上拉加载更多

【代码】Android Compose实现下拉刷新 上拉加载更多。

halong99的专栏 73

Altium Designer 超详细入门教程

本文是一份Altium Designer新手入门教程,详细介绍了从软件基础到PCB制版的全流程。主要内容包括:软件界面介绍与工程创建方法;原理图设计中的元件放置、电气连线、标注添加等操作;PCB设计的布局布线、铺铜和DRC检查;Gerber和钻孔文件的导出方法。教程还提供了分类整理的实用快捷键表和新手避坑指南,强调原理图编译和DRC检查的重要性。通过本教程,新手可以快速掌握AD基本操作,完成简单电路板的设计与制版文件导出。

学习中...... 815

真格量化-bs套利

#!/usr/bin/env python # coding:utf-8 from PoboAPI import * import datetime import time import numpy as np from copy import * #开始时间,用于初始化一些参数 def OnStart(context) : context.myacc = None #登录交易账号 if context.accounts["回测期权"].Login() : co.

qq_26742269的博客 1320

用ListSwipeRefreshLayout实现安卓listView下拉刷新,上拉加载

二级列表做完例子 1、XML布局         android:id="@+id/srl_swipe_refresh_layout"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:background="@col

huyanan的博客 394

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ComposeUI——下拉刷新+上拉加载(一、简单封装)

ComposeUI是将来开发的趋势,本人也在对它进行学习,会把踩过的坑一一记录下来,希望能对大家有帮助。话不多说,直接开干。

lifeidroid的专栏 2271

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android Jetpack Compose 下拉刷新 SwipeRefresh

Android Jetpack Compose 下拉刷新 SwipeRefreshJetpack Compose前言参考使用方法添加依赖代码自定义转圈圈完事 Jetpack Compose 更多与Jetpack Compose相关的文章: Android Jetpack Compose 沉浸式/透明状态栏 ProvideWindowInsets SystemUiController Android Jetpack Compose 可滚动列表 LazyColumn 前言 下拉刷新也是一个在移动端设备上常用的操

杨迪龙的博客 2559

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

使用Jetpack Compose中的SwipeRefresh实现下拉刷新

SwipeRefresh是Jetpack Compose中的一个组件,它可以用来实现下拉刷新的功能。这个组件的主要优点是它的易用性和灵活性,你可以轻松地添加下拉刷新功能到你的应用中,而且可以自定义刷新时的行为。

江小白的博客 1172
上一篇: Java浮点数float和double精确计算的精度误差问题总结
下一篇: RecyclerView
code_dream_wq
博客等级 码龄10年 51粉丝 199原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值