【HarmonyOS】鸿蒙应用使用lottie动画

打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

【HarmonyOS】鸿蒙应用使用lottie动画

一、lottie动画是什么?

https://airbnb.design/lottie

Lottie是由Airbnb团队开发的一个实用于iOS、Android、React Native、Web和Windows的开源动画库,用于剖析使用Bodymovin导出为JSON的Adobe After Effects动画,实时渲染AE动画并在设备上出现它们!
Lottie允许应用步伐像使用静态图像一样轻松使用动画。目前在鸿蒙平台上,也进行了适配:鸿蒙lottie动画三方库地址

目前支持以下动画播放和控制API能力:

若没有lottie动画资源,可以去以下网站下载:
lottie动画资源免费网站
二、鸿蒙应用使用lottie动画步骤:

1.添加lottie动画依靠库
在模块的oh-package.json5设置中,添加一下库版本依靠:(2.0.14为当前最新版本,以动画三方库地址的版本为准)
  1.   "dependencies": {
  2.     "@ohos/lottie": "2.0.14"
  3.   }
复制代码
2.将lottie动画JSON文件放到项目文件夹中
建议放置到Entry目录下,创建common文件夹下,其中创建lottie文件夹,存放动画资源。(放置本模块中,使用相对路径无法读取)。

3.调用lottie动画依靠库
  1. // TODO 1. 引入lottie三方库。
  2. import lottie from '@ohos/lottie';
  3. @Entry
  4. @Component
  5. struct LottiePage {
  6.   // 动画资源路径和名字
  7.   private mPath: string = "common/lottie/robotYoga.json"
  8.   // TODO 相当于key,并非资源配置的名字,可以任意
  9.   private mName: string = "test";
  10.   // TODO 2. 使用RenderingContext在Canvas组件上进行绘制,声明CanvasRenderingContext2D变量,RenderingContextSettings用来配置CanvasRenderingContext2D对象的参数表明canvas是否开启抗锯齿。
  11.   private mRenderingSettings: RenderingContextSettings = new RenderingContextSettings(true);
  12.   private mCanvasRenderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.mRenderingSettings);
  13.   // TODO 6.实现动画播放方法。
  14.   lottieController(): void {
  15.     lottie.stop();
  16.     lottie.play(this.mName);
  17.   }
  18.   build() {
  19.     Column() {
  20.       // TODO 4.创建画布容器承载lottie
  21.       Canvas(this.mCanvasRenderingContext)
  22.         .width(px2vp(1000))
  23.         .height(px2vp(1000))
  24.         .backgroundColor(Color.Gray)
  25.         .onReady(() => {
  26.           //抗锯齿的设置
  27.           this.mCanvasRenderingContext.imageSmoothingEnabled = true;
  28.           this.mCanvasRenderingContext.imageSmoothingQuality = 'medium'
  29.           // 加载动画前先销毁之前加载的动画
  30.           lottie.destroy(this.mName);
  31.           // TODO 5.加载lottie动画
  32.           lottie.loadAnimation({
  33.             container: this.mCanvasRenderingContext,
  34.             renderer: 'canvas',
  35.             frameRate: 60,                               //设置animator的刷帧率为30
  36.             loop: true,
  37.             autoplay: false,
  38.             name: this.mName,
  39.             path: this.mPath,
  40.           });
  41.         })
  42.         .onDisAppear(() => {
  43.           // 组件移除时,可销毁动画资源
  44.           lottie.destroy(this.mName);
  45.         })
  46.       Text("点击播放动画")
  47.         .fontSize(50)
  48.         .fontWeight(FontWeight.Bold)
  49.         .onClick(()=>{
  50.           // TODO 7.在组件事件中调用播放方法
  51.           this.lottieController();
  52.         })
  53.     }
  54.     .height('100%')
  55.     .width('100%')
  56.     .justifyContent(FlexAlign.Center)
  57.   }
  58. }
  59. // TODO 3.定义所需数据类型的接口,初始化变量,接口中需要包含资源路径信息和CanvasRenderingContext2D。
  60. interface TabBarOption {
  61.   index: number;
  62.   text: ResourceStr;
  63.   name: string;
  64.   path: string;
  65.   canvasRenderingContext: CanvasRenderingContext2D;
  66. }
复制代码

注意:
(1) canvas设置的宽高比例建议和动画json资源里面的宽高比例一致,如:json动画资源里的宽高比例是 1:2 ,则canvas设置的宽高也是 1:2
(2) 想要的抗锯齿结果:mainCanvasRenderingContext.imageSmoothingEnabled = true 与 mainCanvasRenderingContext.imageSmoothingQuality = ‘medium’
(3) 动画绘制前会对canvas画布进行清空处置惩罚,画布清空后再绘制动画。


以上示例代码,运行结果如下:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表