HarmonyOS ArkUI 属性动画完全指南:从基础概念到 animateTo 与 animation 实战
引言动画是应用开发中必不可少的部分一方面可以提升用户体验另一方面可以引导用户操作提高信息传达效率。UI 中包含开发者和用户交互时看到的各类组件属性值的变化会引起 UI 变化。如果不加动画属性变化会瞬间完成带来突兀感容易让用户失去视觉焦点动画可以在 UI 变化时添加流畅的过渡效果。本节课将系统讲解 ArkUI 属性动画的基础概念、接口使用与开发实践。核心内容动画概述与使用目的动画的作用UI 属性值变化若不加入动画会瞬间完成造成突兀感易让用户丢失视觉焦点动画可以为 UI 变化添加流畅的过渡效果。使用动画的四个核心目的使界面的过渡自然流畅。增强用户从界面获得的反馈感和互动感。在内容加载等场景中增加用户的耐心缓解等待带来的不适感。引导用户了解和操作设备。属性动画与可动画属性属性动画定义通过改变可动画属性引起 UI 产生连续视觉变化的动画效果按照动画参数逐帧驱动属性变化生成动画是 ArkUI 中最基础的动画类型。可动画属性分类属性可分为可动画属性和不可动画属性可动画属性又分为系统可动画属性和自定义可动画属性。常见系统可动画属性分类分类包含属性布局属性位置、大小、内边距、外边距、对齐方式、权重等仿射变换平移、旋转、缩放、锚点等背景背景颜色、背景模糊等内容文字大小、文字颜色图片对齐方式、模糊等前景前景颜色等外观透明度、圆角、边框、阴影等属性动画接口说明ArkUI 提供animateTo和animation两种属性动画接口都可以通过改变组件可动画属性触发界面连续变化生成属性动画。animateTo 接口语法animateTo(value: AnimateParam, event: () { // 动画的闭包函数闭包内变量改变产生的属性动画将遵循相同的动画参数 })animation 接口语法Image($r(app.media.image)) .rotate({ ... }) // 把 animation 接口加在要做属性动画的可动画属性后检测到其绑定的可动画属性发生变化就会自动添加属性动画 .animation(value: AnimateParam)animateTo 与 animation 接口对比对比维度animateToanimation生成动画方式通过变量控制可动画属性值在闭包内修改变量触发属性变化生成动画绑定在目标可动画属性后检测到属性变化自动添加动画作用范围全局显式动画可同时作用于多个组件组件级属性动画必须绑定单个组件语法结构通过闭包函数触发状态变化通过组件属性直接设置动画参数适用场景多组件同步动画或复杂动画逻辑单个组件简单属性动画如平移、旋转、缩放等动画参数 AnimateParamAnimateParam包含的核心参数参数名参数说明duration动画持续时间单位为毫秒tempo动画播放速度值越大播放越快值越小播放越慢默认值为 1.0curve动画曲线指定动画的速度变化规律delay动画延迟播放时间单位为毫秒默认不延迟iterations动画播放次数默认播放 1 次设置为-1表示无限次循环播放playMode动画播放模式默认播放完成后重头开始播放onFinish动画播放完成后的回调函数动画曲线 Curve动画曲线定义动画曲线是属性值关于时间的变化函数决定了属性变化过程中动画的运动轨迹。某一时刻曲线的斜率代表动画速度对应属性变化的快慢调整曲线可以实现动画的加速和减速效果。动画曲线和时长配合可以产生运动的韵律感。优秀动画曲线的特点连续光滑、符合用户意图、符合物理世界客观规律开发者需要根据场景选择合适的曲线。常见内置动画曲线曲线说明Smooth平滑曲线效果更符合用户认知能创造自然生动的动画效果EaseInOut表示动画以低速开始和低速结束Linear表示动画从头到尾速度保持一致开发案例实现思路案例需求实现两个动画效果点击按钮图片展开、按钮缩小再次点击按钮图片收回、按钮放大展开收合动画。点击单个图片实现图片翻转动画。展开收合动画实现思路定义状态变量控制图片的旋转角度、平移位置和缩放属性展开状态图片旋转 360 度沿 X/Y 轴平移到对应位置按钮缩放为原大小的 0.7 倍。收起状态图片旋转角度为 0、平移距离为 0按钮缩放恢复为原大小。使用animateTo通过闭包修改状态变量触发多组件同步动画。State isExpanded: boolean false; animateTo({ duration: 2000, curve: Curve.Smooth }, () { this.isExpanded !this.isExpanded; }) Image($r(app.media.image)) .rotate({ angle: this.isExpanded ? 360 : 0 }) .translate({ x: this.isExpanded ? 100 : 0, y: this.isExpanded ? 100 : 0 }) .scale({ x: this.isExpanded ? 0.7 : 1, y: this.isExpanded ? 0.7 : 1 })图片翻转动画实现思路为每个图片绑定状态变量控制旋转角度点击图片时修改变量通过animation接口绑定属性生成单个组件的翻转动画。State flipAngle: number 0; Image($r(app.media.image)) .rotate({ angle: this.flipAngle }) .animation({ duration: 1000, curve: Curve.EaseInOut }) .onClick(() { this.flipAngle this.flipAngle 0 ? 180 : 0; })总结本节课系统讲解了 ArkUI 属性动画的核心知识动画基础概念为 UI 属性变化添加流畅过渡效果避免突兀感。使用动画的四个核心目的为过渡自然流畅、增强反馈感、缓解等待不适感、引导用户操作。属性动画与可动画属性通过改变可动画属性逐帧驱动 UI 产生连续视觉变化。系统可动画属性涵盖布局属性、仿射变换、背景、内容、前景、外观六大类。两种属性动画接口animateTo全局显式动画通过闭包修改状态变量触发多组件同步动画适合复杂动画逻辑。animation组件级属性动画绑定单个组件属性检测到变化自动添加动画适合简单平移、旋转、缩放等效果。动画参数 AnimateParam包含duration时长、tempo速度、curve曲线、delay延迟、iterations次数、playMode模式、onFinish完成回调等配置项。动画曲线 Curve属性值关于时间的变化函数决定运动轨迹与速度变化。常见内置曲线包括Smooth平滑、EaseInOut头尾低速、Linear匀速。
