鸿蒙(HarmonyOS)提供了丰富的动画能力,涵盖属性动画、显式动画、转场动画、帧动画等多种类型,适用于不同场景的交互需求。以下是鸿蒙中各类动画的详细解析及使用示例:


1. 属性动画(Property Animation)

作用:通过改变组件的属性(如宽高、透明度、旋转角度等)实现平滑过渡效果。

核心接口animateToanimationkeyframeAnimateTo

特点:系统自动插值计算中间帧,性能优化较好。

示例代码
// 使用 animateTo 实现缩放动画
Button('点击放大').onClick(() => {animateTo({ duration: 1000, curve: Curve.Ease }, () => {this.scaleValue = this.scaleValue === 1 ? 1.5 : 1;});}).scale({ x: this.scaleValue, y: this.scaleValue })
关键点
  • animateTo:显式触发动画闭包内的属性变化。
  • animation修饰符:自动响应状态变化(无需闭包)。
  • 曲线类型:如 Curve.Ease(缓入缓出)、Curve.Spring(弹性效果)。

2. 显式动画(Explicit Animation)

作用:通过animateToImmediately立即下发动画指令,减少延迟。

适用场景:需要优先渲染部分动画时(如高优先级交互反馈)。

示例代码
animateToImmediately({ duration: 500 }, () => {this.translateX = 100; // 立即执行位移动画
});

3. 转场动画(Transition Animation)

作用:处理组件出现/消失时的过渡效果,如页面跳转、弹窗弹出。

类型

  • 基础转场TransitionEffect.opacity(淡入淡出)、TransitionEffect.slide(滑动)。
  • 高级模板:导航转场、模态转场、共享元素转场(一镜到底)。

示例代码
// 共享元素转场(一镜到底)
Image($r('app.media.thumbnail')).sharedTransition('imageTransition', { duration: 1000 })// 页面转场
pageTransition() {PageTransitionEnter({ duration: 300 }).slide(SlideEffect.Right);PageTransitionExit({ duration: 300 }).opacity(0);
}

4. 帧动画(Frame Animation)

作用:逐帧控制属性变化,适合复杂自定义动画。

核心接口@ohos.animator特点:灵活但性能开销较大,需手动管理帧回调。

示例代码
const options = { duration: 2000, begin: 0, end: 100 };
const animator = this.getUIContext().createAnimator(options);
animator.onFrame = (value) => { this.progress = value; };
animator.play();

5. 粒子动画(Particle Animation)

作用:通过大量粒子运动营造氛围(如雪花、火焰)。

组件Particle

配置参数:粒子大小、颜色、速度、生命周期等。

示例代码
Particle({particles: [{emitter: { particle: { type: ParticleType.POINT, radius: 5 } },color: { range: ['#FF0000', '#FFFF00'] }}]
}).width(200).height(200)

6. 路径动画(Motion Path)

作用:让组件沿指定路径运动。

接口motionPath

路径定义:支持 SVG 路径字符串或关键点坐标。

示例代码
Image($r('app.media.rocket')).motionPath({ path: 'M 0 0 L 100 100', rotate: 'auto' })

7. 动画性能优化

  1. 减少布局属性动画:优先使用 scale/translate 替代 width/height,避免触发重新布局。
  2. 合并动画闭包:多个属性变化尽量合并到同一个 animateTo 中。
  3. 使用 renderGroup:对复杂动效组件启用缓存。
  4. 避免后台动画:应用切后台时暂停动画。

8. 常见问题

  • 动画不生效:检查属性是否支持动画(如 zIndex 不可动画)。
  • 丢帧问题:简化动画复杂度,或使用 expectedFrameRateRange 限制帧率范围。
  • 手势与动画衔接:通过 responsiveSpringMotion 继承手势速度,实现自然过渡。

综合示例

@Entry@Componentstruct ComplexAnimationDemo {@State rotate: number = 0;@State isVisible: boolean = false;build() {Column() {// 属性动画 + 转场if (this.isVisible) {Text("Hello HarmonyOS").transition(TransitionEffect.rotate({ angle: 360 }).animation({ duration: 1000 }))}// 显式动画 + 路径Button("触发动画").onClick(() => {this.isVisible = !this.isVisible;animateTo({ duration: 1500 }, () => {this.rotate = 180;});}).motionPath({ path: 'M 0 0 Q 50 100 100 0' })}}}

总结

鸿蒙的动画体系覆盖了从简单属性变化到复杂场景动效的全场景需求,开发者应根据交互目标选择合适的动画类型,并遵循性能优化原则。具体场景可参考官方文档中的动画实践案例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914206.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914206.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914206.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSP-S 模拟赛 10

T1 洛谷 U490727 返乡 思路 首先要意识到一个问题,就是如果所有人总分一定,那么是不会出现偏序的。 可以感性理解一下,就是对于 i,ji, ji,j, 若 ai≤aj,bi≤bja_i \leq a_j, b_i \leq b_jai​≤aj​,bi​≤bj​,那么…

CMD,PowerShell、Linux/MAC设置环境变量

以下是 CMD(Windows)、PowerShell(Windows)、Linux/Mac 在 临时/永久 环境变量操作上的对比表格:环境变量操作对照表(CMD vs PowerShell vs Linux/Mac)操作CMD(Windows)P…

MySQL(131)如何解决MySQL CPU使用率过高问题?

解决MySQL CPU使用率过高的问题需要从多个方面进行排查和优化,包括查询优化、索引优化、配置优化和硬件资源的合理使用等。以下是详细的解决方案和相应的代码示例。 一、查询优化 1. 检查慢查询 使用MySQL的慢查询日志来找到执行时间长的查询。 SET GLOBAL slow_que…

docker基础与常用命令

目录 一.docker概述 1.docker与虚拟机区别 2.Linux 六大命名空间 3.Docker 的核心技术及概念 二.docker部署安装 三.docker常用命令 1.搜索镜像 2.获取镜像 3.查看镜像信息 4.添加镜像标签 5.删除镜像 6.存出与载入镜像 7.上传镜像 8.创建容器 9.查看容器状态 1…

Cypress与多语言后端集成指南

Cypress 简介 基于 JavaScript 的前端测试工具,可以对浏览器中运行的任何内容进行快速、简单、可靠的测试Cypress 是自集成的,提供了一套完整的端到端测试,无须借助其他外部工具,安装后即可快速地创建、编写、运行测试用例,且对每一步操作都支持回看不同于其他只能测试 UI…

计算机毕业设计ssm基于JavaScript的餐厅点餐系统 SSM+Vue智慧餐厅在线点餐管理平台 JavaWeb前后端分离式餐饮点餐与桌台调度系统

计算机毕业设计ssm基于JavaScript的餐厅点餐系统0xig8788(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。扫码点单、手机支付、后厨实时出票已经成为食客对餐厅的基本预期。传统的…

wedo稻草人-----第32节(免费分享图纸)

夸克网盘:https://pan.quark.cn/s/ce4943156861 高清图纸源文件,需要的请自取

Jmeter函数的使用

函数名作用用法${__Random(,,)}${__RandomString(,,)}随机生成一些东西${__Random(000,999,)} ${__Random(${test1},${test2},)}${__RandomString(${__Random(3,9,)},asdfghjkl,)}${__time(,)}获取当前的时间戳,也可以定义格式${__CSVRead(,)}读取CSV文件的格式&…

Windows 用户账户控制(UAC)绕过漏洞

漏洞原理CVE-2021-31199 是一个 Windows 用户账户控制(UAC)绕过漏洞,CVSS 3.1 评分 7.8(高危)。其核心原理如下:UAC 机制缺陷:Windows UAC 通过限制应用程序权限提升系统安全性,但某…

comfyUI-controlNet-线稿软边缘

{WebUI&comfyUI}∈Stable Diffuision,所以两者关于ContrlNet的使用方法的核心思路不会变,变的只是comfyUI能够让用户更直观地看到,并且控制生图的局部过程。 之前的webUI中涉及到ContrlNet部分知识:SD-细节控制-CSDN博客 概…

SOEM build on ubuntu

1.配置 soem2.编译 soem3.结果4.记录一下自己的开发环境家里台式机

STM32--USART串口通信的应用(第一节串口通信的概念)

咱们今天呢给大家讲解咱们 stm32 开发当中的串口的应用啊 , 串口这个专题呢啊是我们那 个学习上必须要掌握的一个外设串口有什么作用呢,其实在我们以后的这个开发程序当中,咱们可能经常需要用到一些调试 信息,对吧? 啊…

STM32F407ZGT6天气时钟+实时温湿度显示(附源码)

文章目录实现功能:项目展示:代码解析:实现功能: 1.主要功能:通过485通信获取传感器温湿度,温湿度数据显示、实时时钟显示与用户交互。使用LVGL在显示屏上展示传感器温湿度数据,并提供UI设置温度…

和鲸社区深度学习基础训练营2025年关卡4

使用 pytorch 构建一个简单的卷积神经网络(CNN)模型,完成对 CIFAR-10 数据集的图像分类任务。 直接使用 CNN 进行分类的模型性能。 提示: 数据集:CIFAR-10 网络结构:可以使用 2-3 层卷积层,ReLU…

前端性能优化全攻略:从加载到渲染

目录 前言网络请求优化资源加载优化JavaScript执行优化渲染优化用户体验优化性能监控与分析总结 前言 随着Web应用复杂度不断提升,前端性能优化变得尤为重要。本文将系统性地介绍从资源加载到页面渲染的全链路性能优化策略,帮助开发者构建高效、流畅的…

hiredis: 一个轻量级、高性能的 C 语言 Redis 客户端库

目录 1.简介 2.安装和配置 2.1.源码编译安装(通用方法) 2.2.包管理器安装(特定系统) 2.3.Windows 安装 3.常用的函数及功能 3.1.连接管理函数 3.2.命令执行函数 3.3.异步操作函数 3.4.回复处理函数 3.5.错误处理 3.6.…

TCP套接字

1.概念套接字是专门进行网络间数据通信的一种文件类型,可以实现不同主机之间双向通信,包含了需要交换的数据和通信双方的IP地址和port端口号。2.套接字文件的创建int socket(int domain, int type, int protocol); 功能:该函数用来创建各种各…

Go语言高并发聊天室(一):架构设计与核心概念

Go语言高并发聊天室(一):架构设计与核心概念 🚀 引言 在当今互联网时代,实时通信已成为各类应用的核心功能。从微信、QQ到各种在线协作工具,高并发聊天系统的需求无处不在。本系列文章将手把手教你使用Go语…

Java基础:泛型

什么是泛型? 简单来说,Java泛型是JDK 5引入的一种特性,它允许你在定义类、接口和方法时使用类型参数(Type Parameters)。这些类型参数可以在编译时被具体的类型(如 String, Integer, MyCustomClass 等&…

RMSNorm实现

当前Qwen、Llama等系列RMSNorm实现源码均一致。具体现实如下: class RMSNorm(nn.Module):def __init__(self, hidden_size, eps1e-6):super().__init__()self.weight nn.Parameter(torch.ones(hidden_size))self.variance_epsilon epsdef forward(self, hidden_s…