HarmonyOS开发:开源一个刷新加载组件

news2025/2/23 7:14:57

前言

系统Api中提供了下拉刷新组件Refresh,使用起来也是非常的好用,但是风格和日常的开发,有着巨大的出入,效果如下:

显然上面的效果是很难满足我们实际的需求的,奈何也没有提供的属性可以更改,没有办法只好动手封装一个。

本篇的文章内容大致如下:

1、下拉和上拉效果展示

2、快速使用

3、具体实现

4、最后总结

一、下拉和上拉效果展示

效果呢很是简单,第一版只支持默认的效果,后续会逐渐支持自定义下拉请求头和上拉加载尾。

 

二、快速使用

私服和远程依赖,由于权限和审核问题,预计需要等到2024年第一季度面向所有开发者,所以,只能使用本地静态共享包和源码 两种使用方式,本地静态共享包类似Android中的aar依赖,直接复制到项目中即可。

本地静态共享包har包使用

首先,下载har包,点击下载

下载之后,把har包复制项目中,目录自己创建,如下,我创建了一个libs目录,复制进去。

引入之后,进行同步项目,点击Sync Now即可,当然了你也可以,将鼠标放置在报错处会出现提示,在提示框中点击Run 'ohpm install'

需要注意,@app/refresh,是用来区分目录的,可以自己定义,比如@aa/bb等,关于静态共享包的创建和使用,请查看如下我的介绍,这里就不过多介绍

HarmonyOS开发:走进静态共享包的依赖与使用

查看是否引用成功

无论使用哪种方式进行依赖,最终都会在使用的模块中,生成一个oh_modules文件,并创建源代码文件,有则成功,无则失败,如下:

代码使用

目前提供了三种用法,一种是ListView形式,就是单列表形式,一种是GridView形式,也就是网格列表形式,还有一种就是RefreshLayout形式,支持任何的组件形式,比如Column,Row等等。

1、ListView形式

ListView({
       items: this.array, //数据源 数组
       itemLayout: (item, index) => this.itemLayout(item, index),//条目布局
       controller: this.controller, //控制器,负责关闭下拉和上拉
       onRefresh: () => {
         //下拉刷新
         this.controller.finishRefresh()
       },
       onLoadMore: () => {
         //上拉加载
         this.controller.finishLoadMore()
       }
     })

其他相关属性介绍

属性

类型

概述

listAttribute

ListAttr

ListView的相关属性

listItemAttribute

ListItemAttr

ListView的Item相关属性

marginHeader

number

距离头部多少距离,用于顶部有固定组件时使用

ListAttr

属性

类型

概述

width

Length

宽度

height

Length

高度

backgroundColor

ResourceColor

背景颜色,默认透明

listDirection

Axis

设置List组件排列方向。默认值:Axis.Vertical

divider

对象

设置ListItem分割线样式,默认无分割线。

scrollBar

BarState

设置滚动条状态

cachedCount

number

设置列表中ListItem/ListItemGroup的预加载数量

edgeEffect

EdgeEffect

设置组件的滑动效果

ListItemAttr

属性

类型

概述

width

Length

宽度

height

Length

高度

backgroundColor

ResourceColor

背景颜色,默认透明

onClick

回调方法

点击事件

2、GridView形式

GridView({
        items: this.array,//数据源 数组
        itemLayout: (item, index) => this.itemLayout(item, index),//条目布局
        controller: this.controller,//控制器,负责关闭下拉和上拉
        onRefresh: () => {
          //下拉刷新
          this.controller.finishRefresh()//关闭下拉刷新
        },
        onLoadMore: () => {
          //上拉加载
          this.controller.finishLoadMore()//关闭上拉加载
        }
      })

其他相关属性介绍

属性

类型

概述

gridAttribute

GridAttr

GridView相关属性

gridItemAttribute

GridItemAttr

GridView的Item相关属性

marginHeader

number

距离头部多少距离,用于顶部有固定组件时使用

GridAttr

属性

类型

概述

width

Length

宽度

height

Length

高度

backgroundColor

ResourceColor

背景颜色,默认透明

columnsTemplate

string

设置当前网格布局列的数量,不设置时默认2列

rowsTemplate

string

设置当前网格布局行的数量,不设置时默认1行。

columnsGap

Length

设置列与列的间距。默认值:0

rowsGap

Length

设置行与行的间距。默认值:0

scrollBar

BarState

设置滚动条状态。默认值:BarState.Off

scrollBarColor

string / number / Color

设置滚动条的颜色。

scrollBarWidth

string / number /

设置滚动条的宽度。

cachedCount

number

设置预加载的GridItem的数量,只在LazyForEach中生效。

GridItemAttr

属性

类型

概述

width

Length

宽度

height

Length

高度

margin

Margin / Length

边距

padding

Padding / Length

内边距

backgroundColor

ResourceColor

背景颜色,默认透明

onClick

回调方法

点击事件

3、RefreshLayout形式

RefreshLayout({
        controller: this.controller,//控制器,负责关闭下拉和上拉
        onRefresh: () => {
          //下拉刷新
          this.controller.finishRefresh() //关闭下拉刷新
        }, onLoadMore: () => {
          //上拉加载
          this.controller.finishLoadMore() //关闭上拉加载
        } }) {
        //可以是任何组件 List/Grid/Column/Row/Text/……
         
      }

4、头部固定组件方式

这种情况也颇为常见,就是列表在一个固定的组件下方,如下图所示,那么这种实现方式有一个潜在的约束,那就是,必须使用Stack作为根布局,并且头组件在刷新组件下方。

项目代码实现

Stack() {
      ListView({
        items: this.array, //数据源 数组
        itemLayout: (item, index) => this.itemLayout(item, index),
        controller: this.controller, //控制器,负责关闭下拉和上拉
        marginHeader: 80,
        onRefresh: () => {
          //下拉刷新
          this.controller.finishRefresh()
        },
        onLoadMore: () => {
          //上拉加载
          this.controller.finishLoadMore()
        }
      })
 
 
      Row() {
        Text("我是标题")
      }.width("100%")
      .height(80)
      .backgroundColor(Color.Pink)
      .justifyContent(FlexAlign.Center)
 
    
    }.alignContent(Alignment.Top)

三、具体实现

实现起来无比的简单,所谓的头和尾,均在列表组件的上下位置,使用offset属性控制其位置,默认在屏幕外部,等手势移动的时候,慢慢展示出头,尾部的话一般也在屏幕外,考虑到列表的展示,会根据数据的多少进行控制,尾部尽量设置在列表的下方即可。

手势往下拉时,改变offset,缓缓地展示出来。

后续等其他功能完善之后,会进行源码地一个解析,请大家持续关注。

四、最后总结

Demo地址:

https://github.com/AbnerMing888/HarmonyOsRefresh

目前支持默认的下拉刷新头和上拉加载尾,暂时不支持自定义,后续有时间了就会暴露出来,大家在使用的时候,特别是RefreshLayout形式,一定要自己控制下拉和上拉的状态,也就是什么时候执行上拉,什么时候执行下拉,举例:如果是一个垂直的列表,那么索引为0可见,即可下拉刷新,索引为最后一个,即可上拉加载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1150659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt实现的自定义登录框连接MySQL(完整的实现过程)

一.开始创建项目 1.创建Qt窗口应用项目: 2.输入文件名、选择项目将要保存的地址 3.构造系统选择qmake 4.类名使用默认的就好,点击继续完成项目的创建 5.创建好的项目如下 二.创建一个资源管理文件 三.创建一个登录对话框窗口 1.选择一个ui界面类 2.选择Dialog without Butt…

【字符指针等_例题详解】

文章目录 前言例题一 :下面关于“指针”的描述不正确的是例题二:下面代码描述正确的是例题三:关于数组指针描述正确的是例题四:下面哪个是数组指针例题五: 下面哪个是函数指针例题六: 定义一个函数指针&…

python实现Excel自动化办公

准备工作 安装相关模块 pip install openpyxl lxml pillow 基本定义 工作簿:一个电子表文件为一个工作簿 活动表:用户当前查看的表活关闭Excel最后查看的表 sheet表 单元格 Excel数据读取操作 打开工作簿并创建一个对象: wb openpyxl.loa…

【2021ICPC沈阳】EFBJHL

不知道为什么感觉以前的场要比现在的简单一点,虽然这场VP虽然题数到了但是还是差点罚时.... 现在的有些场感觉连签到都要签半天,比如前几天的ICPC西安和CCPC桂林,看了下题都不简单 这场甚至银牌题都没什么思维,只需要算法的板子…

mmcv中出现TypeError: FormatCode() got an unexpected keyword argument ‘verify‘

最近安装Co-DETR项目环境时遇到如下的问题 主要是因为最新版的yapf(0.40.2)中删除了verify的验证功能 将其降级为旧版即可: pip install yapf0.40.0

照片去文字水印怎么弄?这三个方法快学起来

照片去文字水印怎么弄?你有没有遇到过这样的烦恼呢?我经常在网上找一些好看的照片来做头像或者壁纸,但是总是遇到一些带水印或者不想要的文字的照片,影响了整体的美观度让人很头疼,每次重新找又得花费不少时间和精力&a…

真心话坦白局系统源码

它具有匿名信息的神秘感 但又会给你一点小提示 能让你有无限挖掘下去的好奇感 也能让你说出那些不敢说出口的话 敢来一场坦白局吗! 坦白局这个功能类似于悄悄话,只不过是匿名的悄悄话。 有时候我们有些话是开不了口的,坦白局给了我们一个…

每日汇评:黄金多头重回2000美元,接下来会发生什么?

受地缘政治因素影响,金价守住了上周五2000美元上方的强劲涨幅; 美元持稳,因为美国债券市场的行动是美联储本周的关键; 由于可能出现牛十字,黄金价格有望进一步上涨,牛旗仍在图表中延续; 继上周五…

vue3 vue3-particles粒子使用方法

注意:这个vue3-particles和particles.vue3有些许差别的(安装、引入方式) particles.vue3示例:vue3 使用particles插件粒子_vueparticles_余温无痕的博客-CSDN博客 下面是vue3-particles使用介绍 先看效果,背景图是自…

Qt3D绘制旋转立方体

近期用了款叫DesktopSpace,也想实现一下这款软件实现的效果 具体实现步骤: 使用Qt3D绘制个旋转的立方体(一)使用快捷键控制立方体显示面(二)创建6个人虚拟桌面,截取不同虚拟桌面,显示在不同的面…

15、SpringCloud -- 延迟消息、异步下单失败处理方案

目录 延迟消息需求理解:思路:代码:发送延迟消息消费延迟消息:1、订单支付状态:2、回补真实库存:3、回补预库存:4、修改本地标识:测试:清除MQ数据:期望结果:实际结果:问题:异步下单失败需求1:代码:发送消息:消费消息:测试:需求2:延迟消息 需求理解: 用户成…

从制造到创造:揭示中国制造的基础瓶颈及其突破

中国制造的产品遍布全球,但很多人认为中国制造的产品缺乏基础,这是为什么呢?本文将从制造的基础入手,探讨中国制造缺乏基础的原因。 一、制造的基础 制造的基础是工艺,工艺的基础包括三个方面:基础材料的研…

如何将word格式的文档转换成markdown格式的文档

如何将word格式的文档转换成markdown格式的文档 前言 A. 介绍Markdown和Word格式文档 什么是Markdown? Markdown是一种轻量级标记语言,旨在简化文本格式化和排版的过程。它以纯文本形式编写,通过使用简单的标记语法,使文档更具…

HarmonyOS开发:基于http开源一个网络请求库

前言 网络封装的目的,在于简洁,使用起来更加的方便,也易于我们进行相关动作的设置,如果,我们不封装,那么每次请求,就会重复大量的代码逻辑,如下代码,是官方给出的案例&am…

0003net程序设计-net旅游景点推荐系统

文章目录 摘 要目录系统设计开发环境 摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&#…

【IDEA】设置sql提示

第一步:注入SQL语言 1.首先选择任意一条sql语句,右击,选择 ‘显示上下文操作’ 2.选择 ‘注入语言或引用’ 3. 往下翻,找到MySQL 第二步:配置MySQL数据库连接 1.首先点击侧边的数据库,再点击上面的加号 2…

antv/g6使用教程及图配置

介绍 G6 是一款由蚂蚁金服 AntV 团队开发的 JavaScript 图形引擎,用于构建各种交互式可视化图形,包括但不限于图表、网络拓扑图、关系图、流程图等。无论是数据分析、决策支持,还是信息可视化,G6 都是一个强大的工具。 以下是 G…

python采集电商jd app商品详情数据(2023-10-30)

一、技术要点: 1、cookie可以从手机app端用charles抓包获取; 2、无需安装nodejs,纯python源码; 3、商品详情接口为:functionId "wareBusiness"; 4、clientVersion "10.1.4"同…

自学C语言的最恐怖的地方是什么?

自学C语言的最恐怖的地方是什么? 当年在网吧学C,人家在玩游戏,我在敲代码,基本上从9点敲到1点,然后再开始玩游戏。。。当时不是装逼,就是觉得有意思,而且当时计算机的确是一门很高大上的职业。…

redis加入window服务及删除

1、命令redis-server.exe --service-install redis.windows.conf,在服务中可配置自动启动 删除redis服务,先停止redis服务运行,管理员cmd模式,sc delete "redis" ,