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

前言

系统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.mzph.cn/news/126461.shtml

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

相关文章

JVM虚拟机:通过一个例子解释JVM中栈结构的使用

代码 代码解析 main方法执行,创建栈帧并压栈。 int d8,d为局部变量,是基础类型,它位于虚拟机栈的局部变量表中 然后创建了一个TestDemo的对象,这个对象在堆中,并且这个对象的成员变量(day&am…

京东API获得JD商品详情 item_get-获得JD商品详情

item_get-获得JD商品详情 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)获取key和secret接入secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_sear…

mysql之基础语句

数据库的列类型 int:整型 用于定义整数类型的数据 float:单精度浮点4字节32位 准确表示到小数点后六位 double:双精度浮点8字节64位 char:固定长度的字符类 用于定义字符类型数据&…

深入理解计算机系统CS213学习笔记

Lecture 01 1. 计算机表示数字 int 整数运算可能会出现错误,超过32位时会出现溢出。 float 浮点数不适用结合律,因为浮点数表示的精度有限。 根其原因,是用有限的位数表示无限的数字空间。 2.利用分层的存储系统,使程序运行更…

从用户角度出发,如何优化大数据可视化体验|北京蓝蓝UI设计公司

作者:蓝蓝设计-鹤鹤 大数据已经成为人们探索世界的新工具。但是,对于普通用户而言,大数据往往比较抽象和难以理解,因此,大数据可视化作为一种非常有效的工具工具被广泛应用。然而,在实际应用中&#xff0c…

【java学习—十一】泛型(1)

文章目录 1. 为什么要有泛型Generic2. 泛型怎么用2.1. 泛型类2.2. 泛型接口2.3. 泛型方法 3. 泛型通配符3.1. 通配符3.2. 有限制的通配符 1. 为什么要有泛型Generic 泛型,JDK1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过…

前端react入门day02-React中的事件绑定与组件

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 React中的事件绑定 React 基础事件绑定 使用事件对象参数 传递自定义参数 同时传递事件对象和自定义参…

nvm安装步骤

注意事项 不要安装任何版本的node.js,有的话卸载干净!注意:要卸载干净了! 安装步骤: nvm下载 点击exe文件安装 安装目录选择:D:\NVM 下一步创建nodejs文件放在D:\NVM 下,然后一直next到最后 …

亿咖通·天穹Pro行泊一体智能驾驶计算平台正式量产

全球出行科技公司亿咖通科技宣布,旗下首款智能驾驶计算平台——亿咖通•天穹Pro行泊一体智能驾驶计算平台(以下简称“该平台”)已向车企正式量产交付。作为亿咖通科技在智能驾驶领域的全新突破,亿咖通•天穹Pro智能驾驶计算平台以…

柯桥专升本学校,自考本科文凭的价值如何?

自考本科文凭的价值如何? 自考本科学历是通过独立学习和考试获得的一种本科学历。对于自考本科学历的价值,很多人感到困惑,那么究竟自考本科学历有多大的价值呢? 首先,在就业市场上,自考本科学历具有一定的竞争力。随…

WPF RelativeSource属性-目标对象类型易错

上一篇转载了RelativeSource的三种用法,其中第二种用法较常见,这里记录一下项目中曾经发生错误的地方,以防自己哪天忘记了,又犯了同样错误—WPF RelativeSource属性-CSDN博客 先回顾一下: 控件关联其父级容器的属性—…

iOS实现弹簧放大动画

效果图 实现代码 - (void)setUpContraints {CGFloat topImageCentery (SCREEN_HEIGHT - 370 * PLUS_SCALE) / 2;[self.topIconView mas_makeConstraints:^(MASConstraintMaker *make) {make.centerX.mas_equalTo(0);make.centerY.equalTo(self.view.mas_top).with.offset(t…

本地仓库转为git仓库推送到gitee

通常有两种获取 Git 项目仓库的方式: 方式一:将尚未进行版本控制的本地目录转换为 Git 仓库; 方式二:从其它服务器 克隆 一个已存在的 Git 仓库。 两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。 方式一&#xff1a…

【Linux进程】先谈硬件—冯诺依曼体系结构

目录 冯诺依曼体系 冯诺依曼体系结构 冯诺依曼体系的工作流程 为什么一个程序要运行,必须的先加载到内存中运行? 从软件数据流角度理解冯诺依曼 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器&#xff0c…

XML External Entity-XXE-XML实体注入

XML 实体? XML 实体允许定义标签,在解析 XML 文档时这些标签将被内容替换。一般来说,实体分为三种类型: 内部实体 外部实体 参数实体。 必须在文档类型定义(DTD)中创建实体 一旦 XML 文档被解析器处理,它将js用定义的常量“Jo Smith”替换定义的实体。正如您所看到…

获取Webshell方法

CMS系统指的是内容管理系统。已经有别人开发好了整个网站的前后端,使用者只需要部署cms,然后通过后台添加数据,修改图片等工作,就能搭建好一个的WEB系统。 CMS获取Webshell方法 WordPress后台拿Webshell phpcms拿Webshell 非CMS…

IDEA优雅自动生成类注释和快捷键生成方法注释

生成类注释 Preferences->Editor->File and Code Templates-> Includes ->File Header 注释模板: /*** Classname ${NAME}* Description ${description}* Date ${DATE} ${TIME}* Created by ZouLiPing*/生成方法和字段注释 查看IDEA自动配置java快捷…

企业如何在自媒体平台推广

自媒体是企业宣传品牌的平台之一,在自媒体平台上企业能够较为自由的决定文案内容发布时间,同时后台也会有专门的数据分析帮助企业了解每一次推广效果,成本可控、数据可查、效果可追踪,还能与用户或者潜在用户互动,进行…

疑难杂症-暂时不能解析域名“mirrors.tuna.tsinghua.edu.cn”

可能是太久没用Ubuntu了,总是有一些莫名其妙的问题 我的方法简单粗暴:不需要重启,打开终端,输入sudo apt-get update,解析成功 还有一些别的方法,不过我也没试过 修改/etc/resolv.conf还是修改/etc/resol…

大厂面试题-什么是服务网格?

概述 服务网格这个概念出来很久了,从2017年被提出来,到2018年正式爆发,很多云厂商和互联网企业都在纷纷向服务网格靠拢。像蚂蚁集团、美团、百度、网易等一线互联网公司,都有服务网格的落地应用。 服务网格是微服务架构的更进一…