animator
animator 模块提供动画控制与缓动曲线计算功能,包含动画回调基类、动画控制器、缓动方程和插值计算等组件。
Class Summary
OHOS::AnimatorCallback
动画回调基类,用于在动画帧更新和停止时执行用户自定义逻辑。
- 构造:无
-
成员函数:
接口名称 功能简述 Callback 每帧开始时的回调,纯虚函数,需子类实现 OnStop 动画停止时的回调,虚函数,可子类重写 -
使用包含头文件:
#include "animator/animator.h" - 声明头文件:
middleware/services/gui/uikit/ui/interfaces/kits/animator/animator.h - 公有运算符:无
- 继承关系:HeapBase
- 嵌套类型:无
- 模板形参:无
OHOS::Animator
动画控制器,用于设置动画属性(时长、重复、启停)并驱动动画执行。
- 构造:
Animator(AnimatorCallback* callback, UIView* view, uint32_t time, bool repeat) -
成员函数:
接口名称 功能简述 Animator 带参数构造函数,绑定回调、视图、时长和重复标志 Start 启动动画 Stop 停止动画 Pause 暂停动画 Resume 从暂停处恢复动画 GetState 获取动画当前状态 SetState 设置动画当前状态 GetTime 获取动画总时长 SetTime 设置动画总时长 GetRunTime 获取动画已运行时长 SetRunTime 设置动画已运行时长 IsRepeat 查询动画是否重复播放 Run 执行一帧动画更新 -
使用包含头文件:
#include "animator/animator.h" - 声明头文件:
middleware/services/gui/uikit/ui/interfaces/kits/animator/animator.h - 公有运算符:无
- 继承关系:HeapBase
- 嵌套类型:无
- 模板形参:无
OHOS::EasingEquation
缓动方程类,提供多种缓动曲线计算函数,用于控制动画速度变化。
- 构造:无
-
成员函数:
接口名称 功能简述 SetBackOvershoot 设置回弹缓动方程中的过冲参数 BackEaseIn 回弹缓入,动画开始时回退后加速 BackEaseOut 回弹缓出,动画到达终点后回弹 BackEaseInOut 回弹缓入缓出,起止两端回弹 CircEaseIn 圆形缓入,加速度呈圆形曲线 CircEaseOut 圆形缓出,减速度呈圆形曲线 CircEaseInOut 圆形缓入缓出,中点对称圆形曲线 CubicEaseIn 三次方缓入,加速度呈三次曲线 CubicEaseOut 三次方缓出,减速度呈三次曲线 CubicEaseInOut 三次方缓入缓出,中点对称三次曲线 LinearEaseNone 线性无缓动,匀速推进 QuadEaseIn 二次方缓入,加速度呈二次曲线 QuadEaseOut 二次方缓出,减速度呈二次曲线 QuadEaseInOut 二次方缓入缓出,中点对称二次曲线 QuintEaseIn 五次方缓入,加速度呈五次曲线 QuintEaseOut 五次方缓出,减速度呈五次曲线 QuintEaseInOut 五次方缓入缓出,中点对称五次曲线 SineEaseIn 正弦缓入,加速度呈正弦曲线 SineEaseOut 正弦缓出,减速度呈正弦曲线 SineEaseInOut 正弦缓入缓出,中点对称正弦曲线 ElasticEaseIn 弹性缓入,先快后慢趋于零 -
使用包含头文件:
#include "animator/easing_equation.h" - 声明头文件:
middleware/services/gui/uikit/ui/interfaces/kits/animator/easing_equation.h - 公有运算符:无
- 继承关系:HeapBase
- 嵌套类型:无
- 模板形参:无
OHOS::Interpolation
插值计算类,提供三次贝塞尔曲线插值计算功能。
- 构造:无
-
成员函数:
接口名称 功能简述 GetBezierInterpolation 计算三次贝塞尔曲线插值 GetBezierY 在标准二维坐标系中计算三次贝塞尔曲线纵坐标 -
使用包含头文件:
#include "animator/interpolation.h" - 声明头文件:
middleware/services/gui/uikit/ui/interfaces/kits/animator/interpolation.h - 公有运算符:无
- 继承关系:HeapBase
- 嵌套类型:无
- 模板形参:无
Functions
OHOS::AnimatorCallback
Callback
virtual void Callback(UIView* view) = 0
功能说明
- 核心用途:每帧动画开始时触发的回调,用于实现具体的动画效果逻辑
- 设计目的:作为纯虚函数,要求子类必须实现该方法以定义动画帧更新行为
- 使用场景:在自定义动画类中继承 AnimatorCallback 并重写该方法,实现逐帧动画效果
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| view | UIView* | 绑定到动画的 UIView 实例指针,由 Animator 构造函数传入 | 非空指针,指向有效的 UIView 对象 |
OnStop
virtual void OnStop(UIView& view)
功能说明
- 核心用途:动画停止时触发的回调,用于执行停止后的收尾逻辑
- 设计目的:虚函数,子类可选择性重写以响应动画停止事件,默认实现为空
- 使用场景:动画调用 Stop() 后自动触发,可用于恢复视图状态或清理资源
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| view | UIView& | 绑定到动画的 UIView 实例引用,由 Animator 构造函数传入 | 引用有效的 UIView 对象 |
OHOS::Animator
Animator(args...)
Animator(AnimatorCallback* callback, UIView* view, uint32_t time, bool repeat)
功能说明
- 核心用途:构造 Animator 对象,绑定动画回调、视图实例、时长和重复标志
- 设计目的:通过构造函数完成动画对象的初始化,关联回调与视图
- 使用场景:创建动画实例时调用,传入回调对象和关联的 UIView
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| callback | AnimatorCallback* | 动画回调指针,用于产生动画效果 | 非空指针,指向有效的 AnimatorCallback 派生类对象 |
| view | UIView* | 绑定到动画的 UIView 实例指针 | 非空指针,指向有效的 UIView 对象 |
| time | uint32_t | 动画总时长,单位毫秒 | 大于0 |
| repeat | bool | 是否重复播放动画 | true:重复播放;false:播放一次 |
Start
void Start()
功能说明
- 核心用途:启动动画,将动画状态设为 START 并注册到 AnimatorManager
- 设计目的:重置运行时间,记录启动时刻,将动画加入管理器驱动队列
- 使用场景:动画初始化完成后调用,开始执行动画帧更新
前置条件
- Animator 对象已通过带参数构造函数完成初始化,callback_ 和 view_ 已绑定
- AnimatorManager 已完成初始化
Kconfig 配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| ENABLE_DYNAMIC_FRAME_RATE | 启用时启动动画前退出低功耗模式 | n |
Stop
void Stop()
功能说明
- 核心用途:停止动画,将状态设为 STOP,触发回调的 OnStop 并从管理器移除
- 设计目的:终止动画执行,通知视图动画已停止,释放管理器中的动画槽位
- 使用场景:动画不再需要继续执行时调用
前置条件
- 动画已通过 Start() 启动或在运行状态
Pause
void Pause()
功能说明
- 核心用途:暂停动画,将状态设为 PAUSE 并从 AnimatorManager 移除
- 设计目的:暂停当前动画帧更新,保留已运行时间,以便后续恢复
- 使用场景:需要临时中断动画但不重置进度时调用
前置条件
- 动画处于 START 或 RUNNING 状态
Resume
void Resume()
功能说明
- 核心用途:从暂停处恢复动画,将状态设为 START 并重新注册到 AnimatorManager
- 设计目的:记录恢复时刻,继续之前的动画进度
- 使用场景:动画暂停后需要继续执行时调用
前置条件
- 动画已通过 Pause() 暂停,处于 PAUSE 状态
GetState
uint8_t GetState() const
功能说明
- 核心用途:获取动画当前状态
- 设计目的:查询动画处于 STOP、START 还是 PAUSE 状态
- 使用场景:在动画运行流程中检查当前状态以决定后续操作
返回值
- 返回类型:
uint8_t
返回动画当前状态
| 返回值 | 触发场景 |
|---|---|
| STOP(0) | 动画已停止 |
| START(1) | 动画已启动或运行中 |
| PAUSE(2) | 动画已暂停 |
SetState
void SetState(uint8_t state)
功能说明
- 核心用途:设置动画当前状态
- 设计目的:直接修改动画状态值,不触发管理器注册/移除逻辑
- 使用场景:需要在标准启停流程之外手动设置动画状态时使用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| state | uint8_t | 要设置的动画状态 | STOP(0)、START(1)、PAUSE(2) |
GetTime
uint32_t GetTime() const
功能说明
- 核心用途:获取动画总时长
- 设计目的:查询动画设定的一次完整播放的总时长
- 使用场景:需要了解动画总时长以计算进度百分比时调用
返回值
- 返回类型:
uint32_t
返回动画总时长(毫秒)
| 返回值 | 触发场景 |
|---|---|
| >0 | 动画已设置时长 |
| 0 | 动画未设置时长 |
SetTime
void SetTime(uint32_t period)
功能说明
- 核心用途:设置动画总时长
- 设计目的:修改动画一次完整播放的总时长
- 使用场景:动画运行前或需要动态调整时长时调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| period | uint32_t | 动画总时长,单位毫秒 | 大于0 |
GetRunTime
uint32_t GetRunTime() const
功能说明
- 核心用途:获取动画已运行时长
- 设计目的:查询动画自启动以来累计的运行时间
- 使用场景:在动画回调中获取已运行时长以计算当前动画进度
返回值
- 返回类型:
uint32_t
返回动画已运行时长(毫秒)
| 返回值 | 触发场景 |
|---|---|
| 0 | 动画未启动或刚启动 |
| >0 | 动画运行中 |
| =period_ | 非重复动画运行完成 |
SetRunTime
void SetRunTime(uint32_t runTime)
功能说明
- 核心用途:设置动画已运行时长
- 设计目的:手动设置动画的已运行时间值
- 使用场景:需要从指定时间点继续动画或重置运行进度时调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| runTime | uint32_t | 动画已运行时长,单位毫秒 | 0 ~ period_ |
IsRepeat
bool IsRepeat() const
功能说明
- 核心用途:查询动画是否设置为重复播放
- 设计目的:判断动画播放完成后是否自动重新开始
- 使用场景:在动画回调中根据是否重复执行不同的逻辑
返回值
- 返回类型:
bool
返回动画是否重复播放
| 返回值 | 触发场景 |
|---|---|
| true | 动画设置为重复播放 |
| false | 动画设置为播放一次 |
Run
void Run()
功能说明
- 核心用途:执行一帧动画更新,计算经过时间并调用回调
- 设计目的:由 AnimatorManager 在每帧调用,驱动动画帧更新逻辑
- 使用场景:由动画管理器自动调用,非用户直接调用;非重复动画运行至总时长后自动停止
前置条件
- 动画处于 START 状态
- callback_ 不为 nullptr
OHOS::EasingEquation
SetBackOvershoot
static void SetBackOvershoot(double overshoot)
功能说明
- 核心用途:设置回弹缓动方程中的过冲参数 s,方程为 (s+1)t^3 - st^2
- 设计目的:控制所有回弹缓动动画的回退幅度,s 越大回弹越明显
- 使用场景:在调用 BackEaseIn/BackEaseOut/BackEaseInOut 之前设置过冲系数
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| overshoot | double | 回弹方程中的过冲参数 s | 1.0 ~ 4.0 |
BackEaseIn
static int16_t BackEaseIn(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:回弹缓入计算,动画开始时先回退再加速趋向终点
- 设计目的:基于方程 (s+1)t^3 - st^2 实现回弹缓入效果
- 使用场景:需要动画开始时有回退效果的缓入曲线
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
BackEaseOut
static int16_t BackEaseOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:回弹缓出计算,动画到达终点后略超再回弹
- 设计目的:基于方程 (s+1)t^3 - st^2 实现回弹缓出效果
- 使用场景:需要动画到达终点时有回弹效果的缓出曲线
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
BackEaseInOut
static int16_t BackEaseInOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:回弹缓入缓出计算,动画起止两端均有回弹效果
- 设计目的:前半段使用 BackEaseIn,后半段使用 BackEaseOut
- 使用场景:需要动画开始回退、终点回弹的组合效果
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
CircEaseIn
static int16_t CircEaseIn(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:圆形缓入计算,加速度变化呈圆形曲线
- 设计目的:基于方程 sqrt(1-t^2) 实现从零速度缓慢加速的缓入效果
- 使用场景:需要平滑加速的圆形曲线缓入动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
CircEaseOut
static int16_t CircEaseOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:圆形缓出计算,减速度变化呈圆形曲线
- 设计目的:基于方程 sqrt(1-t^2) 实现快速启动后缓慢减速的缓出效果
- 使用场景:需要平滑减速的圆形曲线缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
CircEaseInOut
static int16_t CircEaseInOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:圆形缓入缓出计算,前半段加速后半段减速
- 设计目的:前半段使用 CircEaseIn,后半段使用 CircEaseOut
- 使用场景:需要中点对称的圆形曲线缓入缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
CubicEaseIn
static int16_t CubicEaseIn(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:三次方缓入计算,加速度变化呈三次曲线
- 设计目的:基于方程 t^3 实现从零速度缓慢加速的缓入效果
- 使用场景:需要加速幅度较大的三次曲线缓入动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
CubicEaseOut
static int16_t CubicEaseOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:三次方缓出计算,减速度变化呈三次曲线
- 设计目的:基于方程 t^3 实现快速启动后缓慢减速的缓出效果
- 使用场景:需要减速幅度较大的三次曲线缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
CubicEaseInOut
static int16_t CubicEaseInOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:三次方缓入缓出计算,前半段加速后半段减速
- 设计目的:前半段使用 CubicEaseIn,后半段使用 CubicEaseOut
- 使用场景:需要中点对称的三次曲线缓入缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
LinearEaseNone
static int16_t LinearEaseNone(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:线性无缓动计算,动画以恒定速度推进
- 设计目的:基于方程 t 实现匀速运动效果,无加速或减速
- 使用场景:需要匀速线性运动的动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
QuadEaseIn
static int16_t QuadEaseIn(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:二次方缓入计算,加速度变化呈二次曲线
- 设计目的:基于方程 t^2 实现从零速度缓慢加速的缓入效果
- 使用场景:需要平滑加速的二次曲线缓入动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
QuadEaseOut
static int16_t QuadEaseOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:二次方缓出计算,减速度变化呈二次曲线
- 设计目的:基于方程 t^2 实现快速启动后缓慢减速的缓出效果
- 使用场景:需要平滑减速的二次曲线缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
QuadEaseInOut
static int16_t QuadEaseInOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:二次方缓入缓出计算,前半段加速后半段减速
- 设计目的:前半段使用 QuadEaseIn,后半段使用 QuadEaseOut
- 使用场景:需要中点对称的二次曲线缓入缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
QuintEaseIn
static int16_t QuintEaseIn(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:五次方缓入计算,加速度变化呈五次曲线
- 设计目的:基于方程 t^5 实现从零速度缓慢加速的缓入效果
- 使用场景:需要加速幅度最大的五次曲线缓入动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
QuintEaseOut
static int16_t QuintEaseOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:五次方缓出计算,减速度变化呈五次曲线
- 设计目的:基于方程 t^5 实现快速启动后缓慢减速的缓出效果
- 使用场景:需要减速幅度最大的五次曲线缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
QuintEaseInOut
static int16_t QuintEaseInOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:五次方缓入缓出计算,前半段加速后半段减速
- 设计目的:前半段使用 QuintEaseIn,后半段使用 QuintEaseOut
- 使用场景:需要中点对称的五次曲线缓入缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
SineEaseIn
static int16_t SineEaseIn(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:正弦缓入计算,加速度变化呈正弦曲线
- 设计目的:基于方程 sin(t) 实现从零速度缓慢加速的缓入效果
- 使用场景:需要平滑加速的正弦曲线缓入动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
SineEaseOut
static int16_t SineEaseOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:正弦缓出计算,减速度变化呈正弦曲线
- 设计目的:基于方程 sin(t) 实现快速启动后缓慢减速的缓出效果
- 使用场景:需要平滑减速的正弦曲线缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
SineEaseInOut
static int16_t SineEaseInOut(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:正弦缓入缓出计算,前半段加速后半段减速
- 设计目的:前半段使用 SineEaseIn,后半段使用 SineEaseOut
- 使用场景:需要中点对称的正弦曲线缓入缓出动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
ElasticEaseIn
static int16_t ElasticEaseIn(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime)
功能说明
- 核心用途:弹性缓入计算,动画先快后慢趋于零
- 设计目的:基于衰减因子实现弹性缓入效果,速度先快后逐渐衰减
- 使用场景:需要弹性衰减效果的缓入动画
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| startPos | int16_t | 动画起始值 | int16_t 范围 |
| endPos | int16_t | 动画结束值 | int16_t 范围 |
| curTime | uint16_t | 当前时间 | 0 ~ durationTime-1 |
| durationTime | uint16_t | 动画总时长 | 大于0 |
返回值
- 返回类型:
int16_t
返回当前时间对应的插值
| 返回值 | 触发场景 |
|---|---|
| startPos ~ endPos | curTime < durationTime 时返回插值 |
| endPos | curTime >= durationTime 时返回终点值 |
OHOS::Interpolation
GetBezierInterpolation
static int16_t GetBezierInterpolation(int16_t t, int16_t u0, int16_t u1, int16_t u2, int16_t u3)
功能说明
- 核心用途:使用整数定点数计算三次贝塞尔曲线插值,以 [0, 1024] 代替标准方程的 [0, 1]
- 设计目的:基于方程 B(t) = P0(1-t)^3 + 3P1t(1-t)^2 + 3P2t^2(1-t) + P3t^3 实现定点数贝塞尔插值
- 使用场景:需要整数精度贝塞尔插值计算的动画或图形渲染场景
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| t | int16_t | 三次贝塞尔曲线当前变化率 | 0 ~ 1024 |
| u0 | int16_t | 起始点坐标 | 0 ~ 1024 |
| u1 | int16_t | 第一个控制点坐标 | 0 ~ 1024 |
| u2 | int16_t | 第二个控制点坐标 | 0 ~ 1024 |
| u3 | int16_t | 终点坐标 | 0 ~ 1024 |
返回值
- 返回类型:
int16_t
返回当前变化率对应的坐标
| 返回值 | 触发场景 |
|---|---|
| u0 ~ u3 范围内 | 正常插值计算结果 |
static float GetBezierInterpolation(float t, float u0, float u1, float u2, float u3)
功能说明
- 核心用途:使用浮点数计算标准三次贝塞尔曲线插值
- 设计目的:基于标准方程 B(t) = P0(1-t)^3 + 3P1t(1-t)^2 + 3P2t^2(1-t) + P3t^3 实现浮点贝塞尔插值
- 使用场景:需要高精度浮点贝塞尔插值计算的动画或图形渲染场景
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| t | float | 三次贝塞尔曲线当前变化率 | 0.0 ~ 1.0 |
| u0 | float | 起始点坐标 | 0.0 ~ 1.0 |
| u1 | float | 第一个控制点坐标 | 0.0 ~ 1.0 |
| u2 | float | 第二个控制点坐标 | 0.0 ~ 1.0 |
| u3 | float | 终点坐标 | 0.0 ~ 1.0 |
返回值
- 返回类型:
float
返回当前变化率对应的坐标
| 返回值 | 触发场景 |
|---|---|
| u0 ~ u3 范围内 | 正常插值计算结果 |
GetBezierY
static float GetBezierY(float x, float x1, float y1, float x2, float y2)
功能说明
- 核心用途:在标准二维坐标系中,根据横坐标计算三次贝塞尔曲线纵坐标
- 设计目的:基于 P0=(0,0) 和 P3=(1,1) 的贝塞尔方程,通过牛顿迭代法由横坐标求纵坐标
- 使用场景:需要根据时间进度(x)计算动画属性值(y)的贝塞尔缓动场景
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| x | float | 点 P 的横坐标 | 0.0 ~ 1.0 |
| x1 | float | 第一个控制点的横坐标 | 0.0 ~ 1.0 |
| y1 | float | 第一个控制点的纵坐标 | 0.0 ~ 1.0 |
| x2 | float | 第二个控制点的横坐标 | 0.0 ~ 1.0 |
| y2 | float | 第二个控制点的纵坐标 | 0.0 ~ 1.0 |
返回值
- 返回类型:
float
返回点 P 的纵坐标
| 返回值 | 触发场景 |
|---|---|
| 0.0 ~ 1.0 | 正常贝塞尔曲线纵坐标计算结果 |
Type definitions
EasingFunc
typedef int16_t (*EasingFunc)(int16_t startPos, int16_t endPos, uint16_t curTime, uint16_t durationTime);
使用说明:EasingFunc 是缓动函数指针类型,用于定义缓动方程的统一函数签名,EasingEquation 类的各静态方法签名与此类型一致
Enumerations
Animator状态枚举
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| STOP | 0 | 动画停止状态 |
| START | 1 | 动画启动状态 |
| PAUSE | 2 | 动画暂停状态 |
| RUNNING | 3 | 动画运行状态(保留字段,当前未使用) |