HarmonyOS 帧动画如何主动停止

this.uiContext.keyframeAnimateTo({ iterations: -1 }, [
  {
    // 第一段关键帧动画时长为800ms,scale属性做从1到1.5的动画
    duration: 800,
    event: () => {
      this.myScale = 1.5;
    }
  },
  {
    // 第二段关键帧动画时长为500ms,scale属性做从1.5到1的动画
    duration: 500,
    event: () => {
      this.myScale = 1;
    }
  }
]);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

关键帧动画的iterations设置-1,是否有方法可以主动停止动画?

HarmonyOS
2025-01-09 16:36:14
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
FengTianYa

可以通过新启一个duration为0的animateTo动画来打断原有动画效果,参考示例如下:

import { UIContext } from '@kit.ArkUI';

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

  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; // 设置关键帧动画整体播放无限次
          if (this.isRecording) {
            this.uiContext.keyframeAnimateTo({ iterations: -1 },
              [{
                // 关键帧动画时长为800ms,scale属性做从1到1.5的动画
                duration: 800, event: () => {
                  this.myScale = 1.5;
                }
              }])
            this.isRecording = false
            animateTo({ duration: 0, iterations: 1, playMode: PlayMode.Normal }, () => {
              this.myScale = 1
            })
          } else {
            this.isRecording = true
            animateTo({ duration: 1500, iterations: -1, }, () => {
              this.myScale = 0.5;
            })
          }
        })
    }.width('100%').margin({ top: 5 })
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
分享
微博
QQ
微信
回复
2025-01-09 18:38:48
相关问题
HarmonyOS List页面如何主动停止滚动
627浏览 • 1回复 待解决
HarmonyOS 动画如何停止或者取消?
456浏览 • 1回复 待解决
animateTo动画如何直接停止
3097浏览 • 2回复 待解决
HarmonyOS canvas动画如何实现逐动画
635浏览 • 1回复 待解决
HarmonyOS 动画demo
915浏览 • 1回复 待解决
HarmonyOS 属性动画中途如何停止
868浏览 • 1回复 待解决
HarmonyOS 如何停止无限旋转中的动画
600浏览 • 1回复 待解决
HarmonyOS animation动画停止位置不对
461浏览 • 1回复 待解决
HarmonyOS 动画用什么实现
726浏览 • 1回复 待解决
HarmonyOS 有没有动画组件
878浏览 • 1回复 待解决
服务卡片的进度条如何停止动画
9476浏览 • 1回复 待解决
HarmonyOS 属性动画怎么监听回调?
873浏览 • 1回复 待解决
有谁知道是否支持动画
3156浏览 • 1回复 待解决
如何停止UIAbility自身
2318浏览 • 1回复 待解决
HarmonyOS如何实现布局?
597浏览 • 1回复 待解决