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

【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为当前最新版本,以动画三方库地址的版本为准)

  "dependencies": {
    "@ohos/lottie": "2.0.14"
  }

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

3.调用lottie动画依赖库

// TODO 1. 引入lottie三方库。
import lottie from '@ohos/lottie';



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画布进行清空处理,画布清空后再绘制动画。


以上示例代码,运行效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929319.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前缀和(四)除自身以外数组的乘积

238. 除自身以外数组的乘积 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&…

在数据库设计中同步冗余字段的思考与实践

目录 前言1. 冗余字段设计的背景与场景1.1 场景描述1.2 冗余字段的必要性 2. 冗余字段设计的优点2.1 提高查询效率2.2 简化应用逻辑 3. 冗余字段设计的缺点与挑战3.1 数据不一致问题3.2 更新开销增加3.3 数据冗余占用存储空间 4. 如何同步更新冗余字段4.1 手动更新方式4.2 使用…

Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象

继续记录一些Qt开发中的技巧操作: 1.滚动部件的滑动问题 再Linux嵌入式设备上,有时候一个页面的子部件太多,一屏放不下是需要做页面滑动,可以使用“QScrollArea”控件,拖来一个“QScrollArea”控件,将子部件…

【5G】5G技术组件 5G Technology Components

5G的目标设置非常高,不仅在数据速率上要求达到20Gbps,在容量提升上要达到1000倍,还要为诸如大规模物联网(IoT, Internet of Things)和关键通信等新服务提供灵活的平台。这些高目标要求5G网络采用多种新技术…

后端返回前端的数据量过大解决方案

后端返回前端的数据量过大解决方案 性能面板(Performance) chrome调试指南 原因 遇到一个页面有好几个表格,部分表格采用虚拟滚动条 数据量有点大 接近快60s了,看一下是哪里导致的慢 后台请求方法执行并不慢 2024-12-04 15:21:52.889 INFO 69948 …

【CSS in Depth 2 精译_067】11.2 颜色的定义(中):CSS 中的色域与色彩空间

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间 ✔️11.2.2 深入理解颜色表示法 文…

【附源码】基于环信鸿蒙IM SDK实现一个聊天Demo

项目背景 本项目基于环信IM 鸿蒙SDK 打造的鸿蒙IM Demo,完全适配HarmonyOS NEXT系统,实现了发送消息,添加好友等基础功能。代码开源,功能简洁,如果您有类似开发需求可以参考。 源码地址:https://github.c…

AWS创建ec2实例并连接成功

aws创建ec2实例并连接 aws创建ec2并连接 1.ec2创建前准备 首先创建一个VPC隔离云资源并且有公有子网 2.创建EC2实例 1.启动新实例或者创建实例 2.创建实例名 3.选择AMI使用linux(HVM) 4.选择实例类型 5.创建密钥对下载到本地并填入密钥对名称 6.选择自己创建的VPC和公有子网…

请求路径中缺少必需的路径变量[xxxId]

一、请求路径中缺少了必需的路径变量 xxxId。 这通常发生在构建API请求时,未正确设置URL中的参数。以下是解决此问题的步骤: 检查API文档:确认 xxxId是否确实是请求路径中的必需参数。 构建请求URL:确保在构建请求URL时&#xff…

初识TCP(编写回显服务器)

目录 初识TCP(编写回显服务器)TCP相关的API服务器代码实现客户端代码实现部分代码解释注意事项效果展示 初识TCP(编写回显服务器) TCP相关的API ServerSocket : 这是socket类,对应到网卡,但是…

Kali Linux使用Netdiscover工具的详细教程

Kali Linux使用Netdiscover工具的详细教程 引言 在网络安全和渗透测试的过程中,网络发现是一个至关重要的步骤。Netdiscover是Kali Linux中一个非常实用的网络发现工具,它可以帮助用户快速识别局域网中的活动设备。本文将详细介绍如何使用Netdiscover工…

R语言机器学习论文(二):数据准备

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据描述二、数据预处理(一)修改元素名称(二)剔除无关变量(三)缺失值检查(四)重复值检查(五)异常值检查三、描述性统计(一)连续变量数据情…

Net9 Abp Vnext查询、高级搜索、过滤终极解决方案,ORM支持Freesql/SqlSugar/EFCore或原生sql

以员工管理表为例,常用栏位如下图 基本需求:默认搜索框可以模糊查询搜索工号、姓名、手机号、年龄等不需要关联查询基本字段。 特殊需求需要高级搜索:例如按入职区间、部门、公司、年龄段、上级主管等进行模糊搜索,且支持并且或者…

在办公室环境中用HMD替代传统显示器的优势

VR头戴式显示器(HMD)是进入虚拟现实环境的一把钥匙,拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域,正如如今的互联网一样,虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…

PPT怎样做的更加精美

目录 PPT怎样做的更加精美 3D的GIF图片 3维空间图​编辑 结果有明显的对比 阅读高质量文献,采用他们的图 PPT怎样做的更加精美 3D的GIF图片 3维空间图 结果有明显的对比

Altium Designer学习笔记 26-27 PCB布局优化_规则创建

基于Altium Designer 23学习版,四层板智能小车PCB 更多AD学习笔记:Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建Al…

在Unity编辑模式下运行Mono中的方法

[ExecuteAlways] 最简单的方法当然是直接给Mono加上[ExecuteAlways]修饰,这样Mono中的Awake,Update等等都可以在编辑模式下按照原本的时机运行。 [ExecuteAlways] public class TestScript : MonoBehaviour {void TestMethod(){Debug.Log("TestMe…

PDF与PDF/A的区别及如何使用Python实现它们之间的相互转换

目录 概述 PDF/A 是什么?与 PDF 有何不同? 用于实现 PDF 与 PDF/A 相互转换的 Python 库 Python 实现 PDF 转 PDF/A 将 PDF 转换为 PDF/A-1a 将 PDF 转换为 PDF/A-1b 将 PDF 转换为 PDF/A-2a 将 PDF 转换为 PDF/A-2b 将 PDF 转换为 PDF/A-3a 将…

【超图】iClient3D for Cesium 以动静结合方式加载WMTS服务

作者:taco 一、问题来源 在最近支持的项目中,我们面临一个挑战:客户需要在前端动态加载高达3亿级别的白模底面数据。这样做的主要原因是客户的数据库会频繁更新,因此我们需要采用动态加载的方式来确保用户界面能够实时反映最新的…

Y20030026 VUE+Springboot+MYSQL+LW+实体店推广平台的设计与实现 源代码 配置 文档 PPT

实体店推广平台的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着互联网的普及和电子商务的快速发展,消费者的购物习惯发生了显著变化。越来越多的消费者倾向于在线购物,享受便捷、丰富的选择和个性化的购物体验…