【OpenHarmony 实战开发】 做一个 loading加载动画

  • 本篇文章介绍了如何实现一个简单的 loading 加载动画,并且在文末提供了一个 demo 工程供读者下载学习。
  • 作为一个 OpenHarmony 南向开发者,接触北向应用开发并不多。北向开发 ArkUI 老是改来改去,对笔者这样的入门选手来说学习成本其实非常大,希望后面可以慢慢稳定下来吧。最近努力学习了一些,下面将学习经验分享如下:
  • 通过本文您将了解:
    1、使用 ImageAnimator 帧动画组件实现一个自定义 loading 加载动画。
    2、使用 Progress 进度条组件实现 loading 加载动画。

笔者开发环境:(文末附有 demo ArkUI 应用源码,一定得是以下 IDE 和 SDK 版本或者更高版本才能编译运行,这也是坑点之一!!!)

  • 开发板:润和软件 DAYU200 开发板
  • OpenHarmony 版本:OpenHarmony3.2 Beta5
  • IDE:DevEco Studio 3.1.0.200
  • SDK:API9(3.2.10.6)

效果演示

1. 涉及到的知识点 (先大概了解一下,知道要用到这些东西就行)

  • 创建自定义组件
  • ImageAnimator 帧动画组件
  • Progress 进度条组件
  • CustomDialogController 自定义弹窗组件
  • 定时器 API
  • Row 组件
    沿水平方向布局容器。
  • OpenHarmony 组件导读

2、使用 ImageAnimator 帧动画组件自定义 loading 动画开发步骤:

├── ets
│   ├── loading      # loading动画图片帧
│   └── pages        # ets代码
│       ├── Index.ets
│       ├── loadingComponent_part1.ets
│       ├── loadingComponent_part2.ets #ImageAnimator帧动画组件实现自定义loading加载动画
│       └── loadingComponent_part3.ets #Progress进度条组件实现的loading加载动画

2.1 将自定义的 loading 动画的图片帧放在 ets 目录下

  • 组成自定义的 loading 动画的图片帧,详情请见文末提供的 demo 工程

  • 在 entry\src\main\ets 新建一个 loading 目录,将其放在该目录下

2.2 用帧动画组件将动画封装成一个自定义组件

  • ImageAnimator 帧动画组件
  • 在 entry\src\main\ets\pages 下新建.ets 文件
//loadingComponent_part1.ets@Componentexport default struct loadingComponent_part1 {private imageWidth: number | Resource = 0private imageHeight: number | Resource = 0build() {Column() {ImageAnimator().images([{src: '/loading/loading01.png',duration: 200, //每一帧图片的播放时长,单位毫秒},{src: '/loading/loading02.png',duration: 200,},{src: '/loading/loading03.png',duration: 200,},{src: '/loading/loading04.png',duration: 200,},{src: '/loading/loading05.png',duration: 200,},{src: '/loading/loading06.png',duration: 200,}]).width(this.imageWidth).height(this.imageHeight).iterations(-1)  //	设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。.fixedSize(true) //设置图片大小是否固定为组件大小。 true表示图片大小与组件大小一致,此时设置图片的width 、height 、top 和left属性是无效的。false表示每一张图片的width 、height 、top和left属性都要单独设置。.reverse(true) //设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。.fillMode(FillMode.None)//设置动画开始前和结束后的状态,可选值参见FillMode说明.state(AnimationStatus.Running)  //Running表示动画处于播放状态}}
}

2.3 在主页面实现自定义的 loading 动画(完整代码见文末 demo 工程)

  • 首先导入自定义的 loading 动画
import loading1 from './loadingComponent_part1';
  • 使用 CustomDialogController 自定义弹窗组件 自定义一个弹窗用于在主页面实现 loading 动画
struct Index {//用来绘制loading动画的// 要打开在点击事件中添加 this.loading1.open();// 要关闭在点击事件中添加 this.loading1.close();// 通过CustomDialogController类显示自定义弹窗。private loading1: CustomDialogController = new CustomDialogController({builder: loadingProgress_part1(),alignment: DialogAlignment.Center,offset: ({ dx: 0, dy: 0 }),autoCancel: false,customStyle: true});
}//用来绘制loading动画的
@CustomDialog
struct loadingProgress_part1{controller: CustomDialogController;build() {Column() {loading1({ imageWidth: 80,imageHeight: 80 }).margin({top:350})}.width('100%').height('100%').alignItems(HorizontalAlign.Center).backgroundColor(Color.White)}}
  • 使用定时器 API 控制 loading 动画
Button(this.message1).margin({top:100}).fontWeight(FontWeight.Normal).backgroundColor(Color.Green) //设置按钮颜色.onClick(() => {//开始绘制loading动画this.loading1.open();//使用一个setTimeout定时器,setTimeout中第一个参数使用 () => { 要执行的函数 }//this.ocrDialog.close();是关闭loading动画setTimeout( () => {this.loading1.close();} , 3000);})
  • 实现效果

3、使用 Progress 进度条组件实现 loading 加载动画开发步骤:

Progress 进度条组件

(完整代码见文末 demo 工程)

struct Index {@State i: number = 0//aboutToAppear	函数在创建自定义组件的新实例后,在执行其build函数之前执行。aboutToAppear(){//定时器中的setInterval: 重复调用一个函数,在每次调用之间具有固定的时间延迟。setInterval( () => {  this.i = this.i + 10  } , 300);}build() {
...Progress({ value: this.i, type: ProgressType.Linear }).width(200).margin({top:30})Progress({ value: this.i, total: 150, type: ProgressType.ScaleRing }).color(Color.Green).value(this.i).width(50).margin({top:30}).style({ strokeWidth: 15, scaleCount: 15, scaleWidth: 5 })
...
}}
  • 实现效果

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

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

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

相关文章

【每日力扣】98. 验证二叉搜索树 与 108. 将有序数组转换为二叉搜索树

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 98. 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&a…

【C++】适配器模式

文章目录 前言 1. 适配器的介绍2. 仿函数2.1 sort函数的模板参数2.2 priority_queue类的模板参数 3. priority_queue模拟实现3. stack & queue 模拟实现3.1 deque的介绍3.2 deque的优点与缺陷3.3 STL标准库中对于stack和queue的模拟实现 前言 C中的适配器是一种设计模式&am…

物联网实战--平台篇之(四)账户后台交互

目录 一、交互逻辑 二、请求验证码 三、帐号注册 四、帐号/验证码登录 五、重置密码 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631…

给定两个点坐标和半径,求圆心位置

给定两个点坐标和半径,求圆心位置 引言正文结论举例引言 今天在做项目的时候遇到了一个问题,当给定两个点 A = ( x 1 , y 1 ) A=\left ( x_1, y_1 \right )

线程安全的概念及原因

1.观察线程不安全 public class ThreadDemo {static class Counter {public int count 0;void increase() {count;}}public static void main(String[] args) throws InterruptedException {final Counter counter new Counter();Thread t1 new Thread(() -> {for (int …

Docker安装记录

老是报错 “Error response from daemon: Get “https://registry-1.docker.io/v2/”: proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refused” ,不知道是什么原因,卸载了重装一下。 彻底卸载 sudo apt-get purge docker-ce docke…

进一步分析并彻底解决 Flink container exit 143 问题

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

Java并发编程之锁的艺术:面试与实战指南(三)

Java并发编程之锁的艺术:面试与实战指南(三) 文章目录 Java并发编程之锁的艺术:面试与实战指南(三)前言十七、Java中线程和进程的区别是什么?十八、什么是Java内存模型(JMM&#xff…

AlibabaCloud微服务下的链路追踪系统实战详解

🚀 作者 :“二当家-小D” 🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k…

如何利用AI技术提升内容生产的效率和质量

目录 前言1 自动化内容生成1.1 文章生成1.2 视频制作1.3 音频合成 2 内容分发与推广2.1 智能内容推荐2.2 社交媒体管理 3 内容分析与优化3.1 用户反馈分析3.2 内容效果评估 结语 前言 在当今数字化时代,人工智能(AI)技术对内容生产、分发和优…

Django框架之Ajax基础

一、JSON知识回顾 1、什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于在网络之间传输数据。它基于JavaScript的语法,但是独立于编程语言,因此几乎所有编程语言都支持解析和生成JSO…

2024第六届济南国际大健康产业博会将于5月27日如期开幕

由山东省城市经济学会、山东省科学养生协会主办的第六届中国(济南)国际大健康产业博览会,将于5月27-29日,在济南黄河国际会展中心盛大举办。 近年来,健康越来越受到大众的重视,在我国经济重要的转型阶段成…

Java Closeable 和 AutoCloseable接口

AutoCloseable & Closeable Closeable和AutoCloseable都是接口,且都只定义了一个close()方法。 Closeable: 定义于 java.io包中,于JDK5添加; AutoCloseable: 定义于java.lang包中, 于JDK7添加; AutoCloseable.java package java.lang…

AI 编程在哪些场景能够提高效率?

AI 编程在许多场景都能提高效率,其中一些主要场景包括: 1、自动化任务: AI 编程可以用于自动化重复性任务,如数据清洗、数据转换、文件处理等。通过机器学习和自然语言处理等技术,可以让计算机自动执行这些任务&#…

MFC实现点击列表头进行排序

MFC实现点击列表头排序 1、添加消息处理函数 在列表窗口右键,类向导。选择 IDC_LIST1(我的列表控件的ID),消息选择LVN_COLUMNCLICK。 2、消息映射如下 然后会在 cpp 文件中生成以下函数 void CFLashSearchDlg::OnLvnColumnclic…

C++中的右值引用和移动语义

目录 1 左值引用和右值引用 2 左值引用与右值引用比较 3 右值引用使用场景和意义 4 右值引用引用左值及其一些更深入的使用场景分析 5 完美转发 6.常数右边引用 1 左值引用和右值引用 传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性&#xff0c…

顶级开源Kubernetes管理工具有哪些?好用Kubernetes工具推荐

Kubernetes已经成为容器编排领域颠覆性的技术,而充满活力的开源社区是其成功背后的推动力。本文将为大家推荐好用的Kubernetes工具,围绕Kubernetes发展的生态系统的广度和深度。 从自动化和监控到网络和安全性,这些工具为管理容器化应用程序…

数据库系统原理实验报告5 | 数据查询

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本: ———— 本次实验使用到的图形化工具:Heidisql 目录 一、实验目的 二、实验内容 1.找出读者所在城市是“shangh…

最佳实践 | 八爪鱼采集器如何用PartnerShare做全民分销?

在数字化时代,数据采集和分析已经成为企业运营和决策的重要一环。八爪鱼采集器作为一款领先的SaaS产品,凭借其强大的数据采集和处理能力,成为了众多企业和个人用户的心头好。为了进一步拓展市场份额,提升品牌影响力,八…

Web 安全基础理论

Web 安全基础理论 培训、环境、资料、考证 公众号:Geek极安云科 网络安全群:624032112 网络系统管理群:223627079 网络建设与运维群:870959784 移动应用开发群:548238632 短视频制作群: 744125867极安云…