本篇文章介绍了如何实现一个简单的loading加载动画,并且在提供了一个demo工程供读者下载学习。
loading加载动画demo下载地址: https://gitee.com/from-north-to-north/open-armony-north/tree/master/loading_animation作为一个OpenHarmony南向开发者,接触北向应用开发并不多。北向开发ArkUI老是改来改去,对笔者这样的入门选手来说学习成本其实非常大,希望后面可以慢慢稳定下来吧。最近努力学习了一些,下面将学习经验分享如下:
(相关资料图)
通过本文您将了解:
1、使用ImageAnimator帧动画组件实现一个自定义loading加载动画。
2、使用 Progress 进度条组件实现 loading加载动画。
笔者开发环境:(demo ArkUI应用源码,一定得是以下IDE和SDK版本或者更高版本才能编译运行,这也是坑点之一!!!)
开发板:润和软件DAYU200开发板OpenHarmony版本:OpenHarmony3.2 Beta5IDE:DevEco Studio 3.1.0.200SDK:API9(3.2.10.6)效果演示
1. 涉及到的知识点 (先大概了解一下,知道要用到这些东西就行)
创建自定义组件
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-create-custom-components.md
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-page-custom-components-lifecycle.md
ImageAnimator帧动画组件
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md
Progress进度条组件
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-progress.md
CustomDialogController自定义弹窗组件
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md
定时器API
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-timer.md
Row组件
沿水平方向布局容器。https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-container-row.md
OpenHarmony组件导读
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-components-summary.md
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 = 0 private imageHeight: number | Resource = 0 build() { 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动画的@CustomDialogstruct 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 })...}}实现效果
审核编辑 黄宇
关键词:
(责任编辑:黄俊飞)推荐内容
- [OpenHarmony北向应用开发] 做一个 loa
- 贵州规划建设100个县域医疗次中心 加快
- 北部湾港: 华泰联合证券有限责任公司关
- 世界即时看!5月7日起天津将实施网络数据
- 工信部支持三地创建国家级车联网先导区
- 尿素公司哪家强_四季度概念上市公司净利
- 精彩看点:比特是什么意思_bite是什么意思
- 读者来信|西青道部分路段坑洼开裂 市城
- 股票集中度怎么看?
- 中国6G通信技术研发取得重要突破-天天快
- 门店加速扩展,“小红杯”却还在靠贝果刷
- 新增21种本科专业,这个被网友喊话:很需
- 第十三届中国道路交通安全产品博览会长沙
- Tonal卖身不成,估值降10亿美元融到救命钱
- 广东发布一季度民生数据:居民人均可支配
- 科大讯飞:5月6日将发布讯飞星火认知大模
- 每日信息:如何使罐装樱桃馅更甜_孩子满1
- 杭汽轮成功签订万华化学能源站项目4套200
- 新光药业4月20日盘中跌幅达5%
- 8年,写下3000篇巡河日记(绿水青山守护
- 贵州省晴隆县人民法院悬赏执行公告
- 今日热讯:嫩炖牛肉
- 福建省东南电化股份有限公司1#抽凝机组改
- 加湿器能开一晚吗? 天天快讯
- 路口遇到黄灯表示什么_黄灯表示什么
- 关于乔克托宗教_送女孩的生日礼物送什么
- 第133届广交会第一期入场超126万人次
- 快资讯丨4月18日一揽子原油平均价格变化
- 铁锅炖鱼贴饼子_铁锅炖鱼贴饼子做法
- 世界速读:五一档电影《长空之王》发布“
- 桥水创始人达利欧拟在阿布扎比设家族理财
- 高质量 高能量|方向企业高能量方法论大
- 3d大数据分析预测软件_3d和值怎么算最准
- 前沿热点:潜龙诗_关于潜龙诗介绍
- 年底上市/配瓦特连杆 江铃福特Ranger首
- 高标准农田建设有序推进 一季度我国已建
- 全球看点:荣晟环保: 浙江荣晟环保纸业
- 当前通讯!2023淘宝造物节官宣定档,五一
- 500+直播间持续3天接力直播!第二届中国
- 体坛:国足与亚运队达共识,6月热身赛超
- 荣耀MagicBook 14系列正式发布,脱口秀
- 天天讯息:2023天津城市减压之爆笑脱口秀
- 王杰为了爱梦一生歌词_王杰为了爱梦一生
- 多家综合度假村客房已售罄 澳门“五一”
- 金立m7手机故事锁屏怎么关闭_金立m7手机
- 中秋对客户的祝福语句_中秋对客户的祝福语
- 如何提高网络上传速度_怎么提高网络上传
- 世界看热讯:赛季提前结束?切尔西最后大
- 人民热评:如何看待郑渊洁永不再发表作品
- 苏州高新董秘回复:公司2022年三季度商誉
- 国家总局食品安全抽检司孙会川司长一行调
- 网传中国大熊猫保护研究中心专家联合美国
- 世界热推荐:苹果版“余额宝”已正式上线
- 【环球热闻】3月经济数据:一季度经济延
- 为什么消费者对“办卡”不感冒了?-世界
- 全球微头条丨烟台牟平税务: 便民春风
- 欧洲议会批准对科索沃免签:180天内可在
- 宁夏中卫市发布沙尘暴橙色预警信号 能见
- 中国公布惊人数据,全世界紧盯细节,西方
- 重返未来1999星陨之所通关攻略介绍_环球
- 贵州省晴隆县人民法院悬赏执行公告
- 今日热讯:嫩炖牛肉
- 福建省东南电化股份有限公司1#抽凝机组改
- 加湿器能开一晚吗? 天天快讯
- 路口遇到黄灯表示什么_黄灯表示什么
- 关于乔克托宗教_送女孩的生日礼物送什么
- 第133届广交会第一期入场超126万人次
- 快资讯丨4月18日一揽子原油平均价格变化
- 铁锅炖鱼贴饼子_铁锅炖鱼贴饼子做法
- 世界速读:五一档电影《长空之王》发布“
- 桥水创始人达利欧拟在阿布扎比设家族理财
- 高质量 高能量|方向企业高能量方法论大
- 3d大数据分析预测软件_3d和值怎么算最准
- 前沿热点:潜龙诗_关于潜龙诗介绍
- 年底上市/配瓦特连杆 江铃福特Ranger首
- 高标准农田建设有序推进 一季度我国已建
- 全球看点:荣晟环保: 浙江荣晟环保纸业
- 当前通讯!2023淘宝造物节官宣定档,五一
- 500+直播间持续3天接力直播!第二届中国
- 体坛:国足与亚运队达共识,6月热身赛超
- 荣耀MagicBook 14系列正式发布,脱口秀
- 天天讯息:2023天津城市减压之爆笑脱口秀
- 王杰为了爱梦一生歌词_王杰为了爱梦一生
- 多家综合度假村客房已售罄 澳门“五一”
- 金立m7手机故事锁屏怎么关闭_金立m7手机
- 中秋对客户的祝福语句_中秋对客户的祝福语
- 如何提高网络上传速度_怎么提高网络上传
- 世界看热讯:赛季提前结束?切尔西最后大
- 人民热评:如何看待郑渊洁永不再发表作品
- 苏州高新董秘回复:公司2022年三季度商誉
- 国家总局食品安全抽检司孙会川司长一行调
- 网传中国大熊猫保护研究中心专家联合美国
- 世界热推荐:苹果版“余额宝”已正式上线
- 【环球热闻】3月经济数据:一季度经济延
- 为什么消费者对“办卡”不感冒了?-世界
- 全球微头条丨烟台牟平税务: 便民春风
- 欧洲议会批准对科索沃免签:180天内可在
- 宁夏中卫市发布沙尘暴橙色预警信号 能见
- 中国公布惊人数据,全世界紧盯细节,西方
- 重返未来1999星陨之所通关攻略介绍_环球
- 琼阿梅尼:一进训练中心就能看到欧冠奖杯
- 《长月烬明》让“花甲粉”人气大涨!爆款
- 中国书法字典在线查询(中国书法字典)
- 港股异动 | 香港宽频(01310)回落逾5%
- 国联证券给予卫宁健康买入评级,当期业绩
- 首个长三角历史文化名城区域地方标准发布
- 明日湖人VS灰熊G2 詹姆斯、戴维斯、施罗
- 沙特联-C罗锁喉动作染黄伊哈洛点射双响利
- 世界快播:红军长征的故事50字过草地 红
- 古墓丽影9配置比吃鸡高吗_古墓丽影9配置
- 当前热门:沧州大化:4月18日融资买入110
- 世界观热点:Consul 的架构和设计思路
- 崩坏星穹铁道佩拉技能怎么加点
- 广交会折射外贸活跃度进出口支撑作用不减
- 全球时讯:龙口交警持续开展三轮车交通违
- 2023长三角健康峰会在南京盛大开幕——为
- 国产新车报道:北京奔驰GLB正式上市 售31
- 永达汽车(03669.HK):4月18日南向资金
- 街区焕新颜,新湖街道开展云谷片区市容环
- 焦点信息:山西振东健康生物科技股份有限










