鸿蒙5.0开发进阶:ArkTS组件-关键帧动画 (keyframeAnimateTo)

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


关键帧动画 (keyframeAnimateTo)

UIContext中提供keyframeAnimateTo接口来指定若干个关键帧状态,实现分段的动画。同属性动画,布局类改变宽高的动画,内容都是直接到终点状态,例如文字、Canvas的内容等,如果要内容跟随宽高变化,可以使用renderFit属性配置。

说明

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

该接口为UIContext类的成员函数,需要通过UIContext实例对象调用。

keyframeAnimateTo(param: KeyframeAnimateParam, keyframes: Array<KeyframeState>): void

设置关键帧动画。

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

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名类型必填描述
paramKeyframeAnimateParam关键帧动画的整体动画参数。
keyframesArray<KeyframeState>所有的关键帧状态。

KeyframeAnimateParam对象说明

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

名称参数类型是否必填描述
delaynumber

动画的整体延时时间,单位为ms(毫秒),默认不延时播放。

默认值:0

说明:

delay>=0为延迟播放,delay<0表示提前播放。对于delay<0的情况:当delay的绝对值小于实际动画时长,动画将在开始后第一帧直接运动到delay绝对值的时刻的状态;当delay的绝对值大于等于实际动画时长,动画将在开始后第一帧直接运动到终点状态。其中实际动画时长等于单次动画时长乘以动画播放次数。

iterationsnumber

动画播放次数。默认播放一次,设置为-1时表示无限次播放。设置为0时表示无动画效果。

默认值:1

取值范围:[-1, +∞)

onFinish() => void动画播放完成回调。当keyframe动画所有次数播放完成后调用。

KeyframeState对象说明

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

名称参数类型是否必填描述
durationnumber

该段关键帧动画的持续时间,单位为毫秒。

取值范围:[0, +∞)

说明:

- 设置小于0的值时按0处理。

- 设置浮点型类型的值时,向下取整。例如,设置值为1.2,按照1处理。

curveCurve| string | ICurve

该关键帧使用的动画曲线。

默认值:Curve.EaseInOut

说明:

由于springMotionresponsiveSpringMotioninterpolatingSpring曲线时长不生效,故不支持这三种曲线。

event() => void指定在该关键帧时刻状态的闭包函数,即在该关键帧时刻要达到的状态。

示例

该示例主要演示如何通过keyframeAnimateTo来设置关键帧动画。

// xxx.ets
import { UIContext } from '@kit.ArkUI';

@Entry
@Component
struct KeyframeDemo {
  @State myScale: number = 1.0;
  uiContext: UIContext | undefined = undefined;

  aboutToAppear() {
    this.uiContext = this.getUIContext?.();
  }

  build() {
    Column() {
      Circle()
        .width(100)
        .height(100)
        .fill("#46B1E3")
        .margin(100)
        .scale({ x: this.myScale, y: this.myScale })
        .onClick(() => {
          if (!this.uiContext) {
            console.info("no uiContext, keyframe failed");
            return;
          }
          this.myScale = 1;
          // 设置关键帧动画整体播放3次
          this.uiContext.keyframeAnimateTo({ iterations: 3 }, [
            {
              // 第一段关键帧动画时长为800ms,scale属性做从1到1.5的动画
              duration: 800,
              event: () => {
                this.myScale = 1.5;
              }
            },
            {
              // 第二段关键帧动画时长为500ms,scale属性做从1.5到1的动画
              duration: 500,
              event: () => {
                this.myScale = 1;
              }
            }
          ]);
        })
    }.width('100%').margin({ top: 5 })
  }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值