HarmonyOS 鸿蒙Next应用如何使用lottie动画?

HarmonyOS 鸿蒙Next应用如何使用lottie动画? Lottie是由Airbnb团队开发的一个适用于iOS、Android、React Native、Web和Windows的开源动画库,用于解析使用Bodymovin导出为JSON的Adobe After Effects动画,实时渲染AE动画并在设备上呈现它们!

Lottie允许应用程序像使用静态图像一样轻松使用动画。目前在鸿蒙平台上,也进行了适配。

请问鸿蒙应用如何使用lottie动画?提供具体集成使用步骤讲解和源码

3 回复

cke_151.png

一、结论

https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Flottie 进入鸿蒙三方库中心仓,选择lottie三方库,查看最新版本号,进行集成。

cke_6623.png

二、代码实现和详细解释

1.添加lottie动画依赖库 在模块的oh-package.json5配置中,添加一下库版本依赖:(2.0.25为当前最新版本,以动画三方库地址的版本为准)

  "dependencies": {
    "[@ohos](/user/ohos)/lottie": "2.0.25"
  }

2.将lottie动画JSON文件放到项目文件夹中 建议放置到Entry目录下,创建common文件夹下,其中创建lottie文件夹,存放动画资源。(放置本模块中,使用相对路径无法读取)。

cke_8350.png

3.调用lottie动画依赖库

// TODO 1. 引入lottie三方库。
import lottie from '[@ohos](/user/ohos)/lottie';

@Entry
@Component
struct LottiePage {

  // 动画资源路径和名字
  private mPath: string = "common/lottie/robotYoga.json"
  // TODO 相当于key,并非资源配置的名字,可以任意
  private mName: string = "test";

  // TODO 2. 使用RenderingContext在Canvas组件上进行绘制,声明CanvasRenderingContext2D变量,RenderingContextSettings用来配置CanvasRenderingContext2D对象的参数表明canvas是否开启抗锯齿。
  private mRenderingSettings: RenderingContextSettings = new RenderingContextSettings(true);
  private mCanvasRenderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.mRenderingSettings);

  // TODO 6.实现动画播放方法。
  lottieController(): void {


    lottie.stop();
    lottie.play(this.mName);
  }

  build() {
    Column() {
      // TODO 4.创建画布容器承载lottie
      Canvas(this.mCanvasRenderingContext)
        .width(px2vp(1000))
        .height(px2vp(1000))
        .backgroundColor(Color.Gray)
        .onReady(() => {
          //抗锯齿的设置
          this.mCanvasRenderingContext.imageSmoothingEnabled = true;
          this.mCanvasRenderingContext.imageSmoothingQuality = 'medium'

          // 加载动画前先销毁之前加载的动画
          lottie.destroy(this.mName);
          // TODO 5.加载lottie动画
          lottie.loadAnimation({
            container: this.mCanvasRenderingContext,
            renderer: 'canvas',
            frameRate: 60,                               //设置animator的刷帧率为30
            loop: true,
            autoplay: false,
            name: this.mName,
            path: this.mPath,
          });
        })
        .onDisAppear(() => {
          // 组件移除时,可销毁动画资源
          lottie.destroy(this.mName);
        })

      Text("点击播放动画")
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(()=>{
          // TODO 7.在组件事件中调用播放方法
          this.lottieController();
        })
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}

// TODO 3.定义所需数据类型的接口,初始化变量,接口中需要包含资源路径信息和CanvasRenderingContext2D。
interface TabBarOption {
  index: number;
  text: ResourceStr;
  name: string;
  path: string;
  canvasRenderingContext: CanvasRenderingContext2D;
}

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

以上示例代码,运行效果如下:(https://lottiefiles.com/     lottie动画资源免费网站)

cke_10381.png

更多关于HarmonyOS 鸿蒙Next应用如何使用lottie动画?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next应用使用Lottie动画,需在模块级build-profile.json5的dependencies中添加@ohos/lottie库依赖。在ArkTS页面中,通过import引入Lottie组件,使用LottieAnimationView控件加载JSON格式动画资源,可设置自动播放、循环等属性。动画文件需置于工程resources/base/media目录下。

在HarmonyOS Next应用中使用Lottie动画,可以通过@ohos/lottie库实现。以下是具体步骤和示例代码:

1. 安装依赖

在工程的package.json文件中添加依赖:

"dependencies": {
  "@ohos/lottie": "^2.0.0"
}

执行ohpm install安装。

2. 导入模块

在需要使用Lottie的页面中导入:

import { LottieAnimation } from '@ohos/lottie';

3. 添加动画资源

将JSON格式的Lottie动画文件(如animation.json)放入工程的resources/rawfile目录。

4. 在ArkUI中使用

在UI中创建LottieAnimation组件并配置属性:

@Entry
@Component
struct LottieExample {
  private controller: LottieAnimation.Controller = new LottieAnimation.Controller();

  build() {
    Column() {
      LottieAnimation({
        src: $rawfile('animation.json'), // 动画资源路径
        controller: this.controller
      })
        .width(200)
        .height(200)
        .loop(true) // 设置循环播放
        .autoplay(true) // 自动播放
    }
    .width('100%')
    .height('100%')
  }
}

5. 控制动画播放

通过controller控制动画行为:

// 开始播放
this.controller.play();

// 暂停
this.controller.pause();

// 停止
this.controller.stop();

// 跳转到指定进度(0.0到1.0)
this.controller.setProgress(0.5);

6. 监听动画事件

可以监听动画状态变化:

LottieAnimation({
  src: $rawfile('animation.json'),
  controller: this.controller
})
.onStart(() => {
  console.log('动画开始');
})
.onEnd(() => {
  console.log('动画结束');
})

注意事项:

  • 确保JSON文件符合Lottie格式规范
  • 动画资源文件需通过$rawfile()引用
  • 可通过loop()方法设置循环次数(默认无限循环)
  • 性能敏感场景建议控制同时播放的动画数量

以上为HarmonyOS Next中集成Lottie动画的核心步骤,实际开发时可根据需求调整参数和交互逻辑。

回到顶部