HarmonyOS 鸿蒙Next如何实现多张图片组成的帧动画,并控制每一帧的时间?

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

HarmonyOS 鸿蒙Next如何实现多张图片组成的帧动画,并控制每一帧的时间?

鸿蒙如何实现多张图片组成的帧动画,并控制每一帧的时间?

2 回复

可以使用帧动画组件来实现,请参考以下文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-imageanimator-V5 示例代码:

// xxx.ets

@Entry

@Component

struct ImageAnimatorExample {

  @State state: AnimationStatus = AnimationStatus.Initial

  @State reverse: boolean = false

  @State iterations: number = 1

  build() {

    Column({ space: 10 }) {

      ImageAnimator()

        .images([

          {

            src: $r('app.media.test1'),

            duration:1500//单位毫秒

          },

          {

            src: $r('app.media.test2'),

            duration:1000

          },

          {

            src: $r('app.media.test3'),

            duration:2000

          },

          {

            src: $r('app.media.test4'),

            duration:3000

          },

          {

            src: $r('app.media.test5'),

            duration:1000

          },

          {

            src: $r('app.media.test6'),

            duration:3000

          }

        ])

        .duration(2000)

        .state(this.state).reverse(this.reverse)

        .fillMode(FillMode.None).iterations(this.iterations).width(340).height(240)

        .margin({ top: 100 })

        .onStart(() => {

          console.info('Start')

        })

        .onPause(() => {

          console.info('Pause')

        })

        .onRepeat(() => {

          console.info('Repeat')

        })

        .onCancel(() => {

          console.info('Cancel')

        })

        .onFinish(() => {

          console.info('Finish')

          this.state = AnimationStatus.Stopped

        })

      Row() {

        Button('start').width(100).padding(5).onClick(() => {

          this.state = AnimationStatus.Running

        }).margin(5)

        Button('pause').width(100).padding(5).onClick(() => {

          this.state = AnimationStatus.Paused     // 显示当前帧图片

        }).margin(5)

        Button('stop').width(100).padding(5).onClick(() => {

          this.state = AnimationStatus.Stopped    // 显示动画的起始帧图片

        }).margin(5)

      }

      Row() {

        Button('reverse').width(100).padding(5).onClick(() => {

          this.reverse = !this.reverse

        }).margin(5)

        Button('once').width(100).padding(5).onClick(() => {

          this.iterations = 1

        }).margin(5)

        Button('infinite').width(100).padding(5).onClick(() => {

          this.iterations = -1 // 无限循环播放

        }).margin(5)

      }

    }.width('100%').height('100%')

  }

}

更多关于HarmonyOS 鸿蒙Next如何实现多张图片组成的帧动画,并控制每一帧的时间?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next中,实现多张图片组成的帧动画并控制每一帧的时间,可以通过使用ImageAnimator组件来实现。ImageAnimator组件允许你加载一系列图片,并设置每帧的显示时间。

具体步骤如下:

  1. 准备图片资源:将你的图片资源按照帧动画的顺序放置在项目的资源文件夹中。

  2. 配置ImageAnimator:在XML布局文件中添加ImageAnimator组件,并设置其srcList属性为你的图片资源列表,duration属性为每帧显示的时间(以毫秒为单位)。

    <ImageAnimator
        ohos:id="$+id:image_animator"
        ohos:width="match_parent"
        ohos:height="match_parent"
        ohos:srcList="@array/frame_animation_images"
        ohos:duration="100"/> <!-- 每帧显示100毫秒 -->

    res/values/arrays.xml中定义frame_animation_images数组:

    <resources>
        <array name="frame_animation_images">
            <item>@drawable/frame1</item>
            <item>@drawable/frame2</item>
            <!-- 更多帧 -->
        </array>
    </resources>
  3. 启动动画:在代码中无需额外操作,ImageAnimator会自动按照设置的duration播放动画。

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

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!