Animate动画


在近期的项目开发过程中,我频繁地需要对界面元素添加过渡动画效果,以增强用户体验。在此过程中,我接触到了ArkTS提供的`animateTo`全局显式动画接口。这个接口为因闭包代码导致状态变化提供了便捷的过渡动效插入方式,尤其适用于布局类元素的宽高变化以及内容呈现。由于该接口的使用细节和相关参数较多,且文档虽然详细但较为零散,对于初学者来说理解和掌握起来存在一定难度。

`animateTo`接口为状态变化提供了显式的动画添加方式。它不仅支持属性动画,还支持布局类元素的宽高变化动画等。特别需要注意的是,默认情况下,内容(如文字、Canvas内容)会直接到达终点状态。若要让内容跟随宽高变化,可以使用`renderFit`属性进行配置。

以下是关于`animateTo`接口的详细信息及其参数说明:

接口版本支持情况:

从API Version 7开始支持此接口,后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

从API version 9开始,该接口在ArkTS卡片中得以使用。

从API version 10开始,可以通过使用`UIContext`中的`animateTo`来明确UI的执行上下文。

从API version 11开始,该接口支持在元服务中使用。

参数详解:

value:`AnimateParam`类型,必填项。用于设置动画效果相关参数。

event:`() => void`类型,必填项。指定动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。

`AnimateParam`对象包含了多个用于配置动画效果的参数:

动画持续时间(类型:`number`):表示动画持续的时间,单位为毫秒。默认值为1000毫秒。若设置超出最大值或小于0的值,则按默认值处理;若设置浮点型类型的值,则向下取整处理。

动画播放速度(类型:`number`):值越大动画播放越快,值越小播放越慢。当设置为0时无动画效果,默认值为1.0。当设置小于0的值时按值为1处理。

动画曲线(类型:`Curve | ICurve9+ | string`):定义了动画的曲线效果,默认值为`Curve.EaseInOut`。

动画延迟播放时间(类型:`number`):单位为毫秒,用于设置动画的延迟播放时间。默认不延时播放,取值范围为`(-∞, +∞)`。若延迟时间大于等于实际动画时长,则动画将在开始后直接运动到终点状态;若延迟时间小于实际动画时长,则动画将在开始后的第一帧直接运动到延迟时间的时刻的状态。

动画播放次数(类型:`number`):用于设置动画播放的次数。默认播放一次,设置为-1时表示无限次播放;设置为0时无动画效果。取值范围为`[-1, +∞)`。

播放模式(类型:`PlayMode`):定义了动画的播放模式。默认值为`PlayMode.Normal`。推荐使用`PlayMode.Normal`和`PlayMode.Alternate`,这两者在动画的第一轮是正向播放的;而如使用`PlayMode.Reverse`和`PlayMode.AlternateReverse`则动画的第一轮是逆向播放的,需注意其使用场景和潜在问题。

动画播放完成回调(类型:`() => void`):当动画播放完成时会触发此回调。

FinishCallbackType(类型:`FinishCallbackType`):在动画中定义`onFinish`回调的类型,用于定义动画结束后的行为,默认值为`FinishCallbackType.REMOVED`。

ExpectedFrameRateRange(类型:`ExpectedFrameRateRange`):用于设置动画的期望帧率范围。

还有一些使用注意事项:

在动画闭包函数中改变属性,可以实现停止该属性动画的效果。

如果需要在组件出现时创建动画,建议在`onAppear`中实现。不推荐在`aboutToAppear`、`aboutToDisappear`中调用动画,因为这些时机可能不适用于所有的组件和动画类型。

对于组件内不支持的转场动画,可以使用`animateTo`接口实现组件的消失动画效果。

通过以上对`animateTo`接口及其参数的详细介绍,相信你已经对该接口有了更深入的了解。在实际开发中,根据需求灵活配置参数,你可以实现各种炫酷的动画效果,为你的应用增添动感和