动画是UI界面的重要元素之一,精心设计的动画能使UI界面更直观,有助于改进应用程序的外观并改善用户体验。
ArkUI开发框架为开发者提供了丰富的动画能力,如属性动画、转场动画及自定义动画等。这些动画能力帮助开发者美化了UI界面,但不适用于绘制某些比较复杂的动画,例如,属性动画主要针对动画的通用属性进行动态变化,内容动效不够丰富,且变更时需要修改或重写代码;Gif动态图放大后锯齿明显,精度越高占用存储空间越大,直接影响安装包的大小;svg动画DOM节点多开销大,缺乏与用户的交互。因此,我们引入了比较成熟的Lottie组件,提升了ArkUI开发框架的动画能力。
一、Lottie介绍
1. 什么是Lottie?
图1 整体流程
2. Lottie绘制流程
图2 lottie绘制流程
- 动画加载准备,在使用Lottie加载动画前需先通过插件 bodymovin 将AE生成的动画文件转换为通用的 json 格式描述文件。开发者也可以从互联网获取合适的动画资源直接应用。(获取链接:https://lottiefiles.com/)
- 获取json文件中的动画数据。
- 解析json文件中的动画数据。
- 创建动画实例,设置动画信息。
- 初始化布局宽高,设置绘制样式等信息。
- 启动动画,触发逐帧绘制。
- 更新动画进度。
- 返回动画实例,通过loadAnimation()接口返回动画实例AnimationItem。
- 控制动画,Lottie提供了一整套简洁易用API,如停止stop()、暂停pause()、播放play()、播放流转togglePause()、方向setDirection()、速度setSpeed()等。
3. Lottie优点
- 只需使用Lottie解析json文件就能实现动画的加载,基本上实现了0代码开发。
- 应用开发者可以通过修改json文件的参数,将动画运行到不同的应用程序中,实现动画的一次设计多端使用。
- 应用开发者可从网络直接下载json文件,实时更新动画资源。
- Lottie基于canvas 画布进行基础的2D渲染,让动画流畅度更高。
- Lottie可以将UX设计师给出的复杂动画效果还原到应用程序中 。
- Lottie提供了丰富的API,让开发者能轻松控制动画,大大提高了开发效率。
二、Lottie实战
1. 创建项目
图3 创建工程
2. 添加依赖
图4 指定npm仓库地址
图5 下载Lottie组件
3. 导出动画资源并保存
图6 json保存路径
4. 编写逻辑代码
import lottie from '@ohos/lottie-ohos-ets'
@Entry
@Component
struct Index {
private controller: RenderingContext = new RenderingContext();
// 动画别名
private animateName: string = "animation";
// 动画资源相对路径
private animatePath: string = "common/lottie/animation.json";
private onPageHide(): void {
// 随页面隐藏销毁动画
lottie.destroy();
}
build() {
Column() {
// 声明Animator与Canvas组件
Animator('__lottie_ets')
Canvas(this.controller)
.width('30%')
.height('20%')
.backgroundColor('#ff0000')
.onAppear(() => {
// 随Canvas布局自动加载动画
let anim = lottie.loadAnimation({
container: this.controller,
renderer: 'canvas',
loop: true,
autoplay: true,
name: this.animateName,
path: this.animatePath
})
})
Button('togglePause')
.onClick(() => {
// 声明button按键与设置点击事件,通过点击控制动画暂停与播放的切换
lottie.togglePause(this.animateName);
})
}
.width('')
.height('')
}
}
效果如下所示:
以上就是ArkUI开发框架中Lottie组件的使用,希望广大开发者能利用这个强大的开源组件开发出更多精美的应用。
扫码添加开发者小助手微信
获取更多HarmonyOS开发资源和开发者活动资讯