HarmonyOS 鸿蒙Next 组件的animation设置,iterations=-1;,已经监听到onFinish,动画效果怎么还在

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 组件的animation设置,iterations=-1;,已经监听到onFinish,动画效果怎么还在

咨询描述:组件的animation设置,iterations=-1;,已经监听到onFinish,动画效果怎么还在

咨询场景描述:播放动画,播放完成后,将动画效果改为1,动画还在

2 回复

1秒=1000毫秒,这边写了一个demo,有个0.5秒和10秒的对比,即一个按钮的duration为1000ms,一个按钮的duration为500ms,可以看一下:

// xxx.ets
@Entry
@Component
struct AttrAnimationExample {
  @State widthSize: number = 250
  @State widthSize1: number = 250
  @State heightSize: number = 100
  @State rotateAngle: number = 0
  @State heightSize1: number = 100
  @State rotateAngle1: number = 0
  @State flag: boolean = true
  @State flag1: boolean = true

  build() {
    Column() {
      Button('change size  10秒')
        .onClick(() => {
          if (this.flag) {
            this.widthSize = 150
            this.heightSize = 60
          } else {
            this.widthSize = 250
            this.heightSize = 100
          }
          this.flag = !this.flag
        })
        .margin(30)
        .width(this.widthSize)
        .height(this.heightSize)
        .animation({
          duration: 10000, //1秒=1000毫秒(ms)
          curve: Curve.EaseOut,
          iterations: 3,
          playMode: PlayMode.Normal
        })
      Button('change size  0.5秒')
        .onClick(() => {
          if (this.flag1) {
            this.widthSize1 = 150
            this.heightSize1 = 60
          } else {
            this.widthSize1 = 250
            this.heightSize1 = 100
          }
          this.flag1 = !this.flag1
        })
        .margin(30)
        .width(this.widthSize1)
        .height(this.heightSize1)
        .animation({
          duration: 500, //1秒=1000毫秒(ms)
          curve: Curve.EaseOut,
          iterations: 3,
          playMode: PlayMode.Normal
        })
    }.width('100%').margin({ top: 20 })
  }
}

更多关于HarmonyOS 鸿蒙Next 组件的animation设置,iterations=-1;,已经监听到onFinish,动画效果怎么还在的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS鸿蒙Next组件的animation设置中iterations=-1导致动画在onFinish后仍然继续的问题,这里提供直接解答:

在HarmonyOS动画系统中,iterations属性定义了动画循环的次数。当设置为-1时,表示动画将无限循环。因此,即使动画监听器中的onFinish方法被触发,动画本身仍然会继续执行,因为它被设置为无限循环。

要解决这个问题,你可以采取以下几种方法:

  1. 修改iterations:将iterations设置为一个具体的正整数,以限制动画的循环次数。例如,设置为1表示动画只执行一次。

  2. 使用动画控制器:在动画执行过程中,通过动画控制器(如Animator对象)来控制动画的停止。你可以在适当的时候调用cancel()end()方法来停止动画。

  3. 检查动画监听器:确保onFinish监听器正确实现,并且没有其他逻辑干扰动画的停止。

如果上述方法仍然无法解决问题,可能是由于动画系统的其他特性或bug导致的。此时,建议检查鸿蒙系统的更新日志或文档,看是否有相关的修复或说明。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部