0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙上做一个loading加载动画

OpenHarmony技术社区 来源:OST开源开发者 2023-04-17 10:20 次阅读

本篇文章介绍了如何实现一个简单的 loading 加载动画,并且在文末提供了一个 demo 工程供读者下载学习。

作为一个 OpenHarmony 南向开发者,接触北向应用开发并不多。北向开发 ArkUI 老是改来改去,对笔者这样的入门选手来说学习成本其实非常大,希望后面可以慢慢稳定下来吧。

最近努力学习了一些,下面将学习经验分享如下:

使用 ImageAnimator 帧动画组件实现一个自定义 loading 加载动画

使用 Progress 进度条组件实现 loading 加载动画。

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

开发板:润和软件 DAYU200 开发板

OpenHarmony 版本:OpenHarmony3.2 Beta5

IDE:DevEco Studio 3.1.0.200

SDK:API9(3.2.10.6)

效果演示:

30ef34d8-dc25-11ed-bfe3-dac502259ad0.gif

①涉及到的知识点

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

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

代码如下:

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

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

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

319fb0f6-dc25-11ed-bfe3-dac502259ad0.png

在 entrysrcmainets 新建一个 loading 目录,将其放在该目录下:

31b21e76-dc25-11ed-bfe3-dac502259ad0.png

(2)用帧动画组件将动画封装成一个自定义组件

ImageAnimator 帧动画组件:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md
在 entrysrcmainetspages 下新建 .ets 文件:
//loadingComponent_part1.ets
@Component

exportdefaultstructloadingComponent_part1{
privateimageWidth:number|Resource=0
privateimageHeight: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表示动画处于播放状态
}
}
}

(3)在主页面实现自定义的 loading 动画

首先导入自定义的 loading 动画:

importloading1from'./loadingComponent_part1';

使用 CustomDialogController 自定义弹窗组件自定义一个弹窗用于在主页面实现 loading 动画。

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md

代码如下:

structIndex{
//用来绘制loading动画的
//要打开在点击事件中添加this.loading1.open();
//要关闭在点击事件中添加this.loading1.close();
//通过CustomDialogController类显示自定义弹窗。
privateloading1:CustomDialogController=newCustomDialogController({
builder:loadingProgress_part1(),
alignment:DialogAlignment.Center,
offset:({dx:0,dy:0}),
autoCancel:false,
customStyle:true
});
}

//用来绘制loading动画的
@CustomDialog
structloadingProgress_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);

})

实现效果:

31c36816-dc25-11ed-bfe3-dac502259ad0.gif

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

Progress 进度条组件:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-progress.md

部分代码如下:

structIndex{
@Statei: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})
...
}

}

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    4429

    浏览量

    93993
  • 开发环境
    +关注

    关注

    1

    文章

    203

    浏览量

    16460
  • SDK
    SDK
    +关注

    关注

    3

    文章

    966

    浏览量

    44703
  • 鸿蒙
    +关注

    关注

    55

    文章

    1629

    浏览量

    42120
  • OpenHarmony
    +关注

    关注

    23

    文章

    3297

    浏览量

    15159

原文标题:鸿蒙上做一个loading加载动画

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [OpenHarmony北向应用开发] 做一个 loading加载动画

    - 本篇文章介绍了如何实现一个简单的loading加载动画,并且在提供了一个demo工程供读者下载学习。 - loading加载
    的头像 发表于 04-20 11:29 1447次阅读
    [OpenHarmony北向应用开发] <b class='flag-5'>做一个</b> <b class='flag-5'>loading</b><b class='flag-5'>加载</b><b class='flag-5'>动画</b>

    用MATLAB做一个交流电机运行的动画

    求高手帮忙,做一个类似于这个图的动画,要求:N极 S极之间的线圈直旋转
    发表于 04-08 10:05

    【HarmonyOS】鸿蒙图片加载工具汇总

    库。Glide 的主要重点是使滚动任何类型的图像列表尽可能平滑和快速,但 Glide 也适用于几乎所有需要获取、调整大小和显示远程图像的情况。2、鸿蒙图片加载工具——frescoFresco 是
    发表于 03-25 13:51

    鸿蒙JS开发接口请求loading怎么解决?

    鸿蒙JS开发接口请求loading?
    发表于 05-10 10:24

    Android中的alpha动画是这个AlphaAnimation, 鸿蒙的alpha动画是哪一个

    Android中的alpha动画是这个AlphaAnimation,鸿蒙的alpha动画是哪一个
    发表于 06-15 10:29

    请问鸿蒙hap包是否支持插件化开发?

    如题,安卓上可以使用dexclassloader机制动态加载其他apk作为插件使用,鸿蒙上用类似的能力吗?有什么解决方案呢?
    发表于 06-16 11:34

    鸿蒙上使用Python进行物联网编程

    炫耀!然而,这却是非常重要的一步:在鸿蒙上用使用 Python 进行物联网编程是可行的!!! 既然可行,加上 Python 语言天生的优势(易于掌握,开发效率高),那么真的值得持续打造,将鸿蒙上的 Python 进行到底。 所以,今天的主题就是利用 GPIO 搭配 I2C
    的头像 发表于 09-28 09:55 3731次阅读
    在<b class='flag-5'>鸿蒙上</b>使用Python进行物联网编程

    鸿蒙上安装按钮实现下载、暂停、取消、显示等操作

    今天给大家分享在鸿蒙上一个按钮实现下载、暂停、取消、显示下载进度操作。
    的头像 发表于 01-04 14:32 1844次阅读

    支持上拉加载和下拉刷新的鸿蒙版基础控件教程

    介绍 这是一个支持上拉加载和下拉刷新的鸿蒙版基础控件,用于页面数据刷新和加载 软件架构 软件架构说明 使用鸿蒙基础控件实现 项目背景 由于大都数项目需要用到下拉刷新和上拉
    发表于 03-29 13:35 0次下载

    视图动画加载用法案例

    : 《 com 。github 。.jlmd _ 动画加载视图。AnimatedCircleLoadingView ohos: id = “$+id:circle_loading_view” ohos
    发表于 03-31 09:06 1次下载

    一个高仿新版的加载动画控件

    描述 一个高仿新版58加载动画控件 集成 allprojects{ repositories{ mavenCentral() } } implementation ‘io.openharmony.tpc.thirdlib:ohos-shapeLoadingView:1.0
    发表于 03-31 09:17 0次下载
    一个高仿新版的<b class='flag-5'>加载</b><b class='flag-5'>动画</b>控件

    用于openharmony和动画加载视图控件

    描述 一个简单的加载视图,用于openharmony和动画。简单的带有动画效果的加载控件。 依赖 allprojects{ 存储库{ mavenCentral() } } 实施
    发表于 03-31 09:21 4次下载

    鸿蒙开发者使用的计数动画文本视图

    该三方开源库从github fork过来,主要将底层接口调用的实现修改成鸿蒙接口的实现,将三方库鸿蒙化,供开发鸿蒙应用的开发者使用。 计数动画文本视图一个很小的库使对Text的
    发表于 04-02 14:26 1次下载

    鸿蒙上实现“数字华容道”小游戏

    本篇文章教大家如何在鸿蒙上实现“数字华容道”小游戏。
    的头像 发表于 12-26 09:52 871次阅读

    鸿蒙上开发“小蜜蜂”游戏

    小时候我们有个熟悉的游戏叫小蜜蜂。本文教大家在鸿蒙上学做这个小蜜蜂游戏。
    的头像 发表于 04-03 11:27 1249次阅读