📚往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录)
🎯 鸿蒙(HarmonyOS)北向开发知识点记录~
🎯 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
🎯 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
🎯 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
🎯 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
🎯 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
🎯 记录一场鸿蒙开发岗位面试经历~
🎯 持续更新中……
简介
lottie是一个适用于OpenHarmony的动画库,它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画,并在移动设备上进行本地渲染。

下载安裝
ohpm install @ohos/lottie
使用示例
完整示例
import lottie, { AnimationItem } from '@ohos/lottie';
@Entry
@Component
struct Index {
// 构建上下文
private renderingSettings: RenderingContextSettings = new RenderingContextSettings(true)
private canvasRenderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.renderingSettings)
private animateItem: AnimationItem | null = null;
private animateName: string = "animation"; // 动画名称
// 页面销毁时释放动画资源
aboutToDisappear(): void {
console.info('aboutToDisappear');
lottie.destroy();
}
build() {
Row() {
// 关联画布
Canvas(this.canvasRenderingContext)
.width(200)
.height(200)
.backgroundColor(Color.Gray)
.onReady(() => {
// 加载动画
if (this.animateItem != null) {
// 可在此生命回调周期中加载动画,可以保证动画尺寸正确
this.animateItem?.resize();
} else {
// 抗锯齿的设置
this.canvasRenderingContext.imageSmoothingEnabled = true;
this.canvasRenderingContext.imageSmoothingQuality = 'medium'
this.loadAnimation();
}
})
}
}
loadAnimation() {
this.animateItem = lottie.loadAnimation({
container: this.canvasRenderingContext,
renderer: 'canvas', // canvas 渲染模式
loop: true,
autoplay: false,
name: this.animateName,
contentMode: 'Contain',
path: "common/animation.json",
})
// 因为动画是异步加载,所以对animateItem的操作需要放在动画加载完成回调里操作
this.animateItem.addEventListener('DOMLoaded', (args: Object): void => {
this.animateItem.changeColor([225, 25, 100, 1]);
this.animateItem.play()
});
}
destroy() {
this.animateItem.removeEventListener("DOMLoaded");
lottie.destroy(this.animateName);
this.animateItem = null;
}
}
注意事项
- 1.建议在 canvas 的 onReady 方法中加载动画,并在加载该动画之前先调用 lottie.destroy(name) 方法,以确保动画不会重复加载。
- 2.建议对动画animateItem的操作放在addEventListener的’DOMLoaded’回调监听中,确保在完全构建并解析完成后,再执行与动画相关的操作,从而避免潜在的加载顺序问题。因为如果是同一个代码块,动画的加载是异步加载的。
- 3.建议添加动画抗锯齿,如示例代码67到68行,以减少动画边缘的锯齿状现象,使动画画面更加平滑细腻,实现更佳的动画效果。
- 4.动画的销毁,推荐使用lottie.destroy(name)方法,相较于直接使用animateItem.destroy(),性能更友好。
- 5.建议在页面销毁或卸载时,将页面上所有的动画进行销毁,确保页面资源得到妥善管理和释放。
- 6.混淆模式编译报错,建议在对应的模块下的obfuscation-rules.txt文件添加配置:-keep ./oh_modules/@ohos/lottie。
- 7.建议canvas的宽高比例与动画的宽高比例保持一致。例如动画的宽高比是1000 * 2000(即1:2的比例),那么可以将canvas的宽高设置为 200 * 400,同样保持1:2的比例。建议canvas的宽高不要大于动画的原始宽高。 <


1171

被折叠的 条评论
为什么被折叠?



