笔记 HarmonyOS实战开发:ImageAnimator 帧动画组件

        帧动画就是类似播放电影一样,一帧一帧的进行播放,相对于属性动画,每一帧,我们都可以进行设置相关属性,且具有暂停播放,继续播放的优点。具有事件的实时响应,但在性能上远远不如属性动画,所以如果可以能用属性动画实现的场景,还是使用属性动画为好。

ImageAnimator不是容器组件,也不需要传递参数,只需要设置属性即可。

ImageAnimator()
.属性()

常用属性    

参数名称参数类型参数描述
imagesArray设置图片帧信息集合。   说明:   不支持动态更新。
stateAnimationStatus默认为初始状态,用于控制播放状态。
durationnumber单位为毫秒,默认时长为1000ms;  duration0时,不播放
图片;值的改变只会在下一次循环开始时生效;当images
任意一帧图片设置了单独的duration后,该属性设置无效。
默认值:  1000 API version 10开始,该接口支持在ArkTS
片中使用。
iterationsnumber默认播放一次,设置为-1时表示无限次播放。   默认值:  1
revers        boolean设置播放方向
fixedSizeboolean设置图片大小是否固定为组件大小
fillModeFillMode设置当前播放方向下,动画开始前和结束后的状态

 代码演示:

@Entry
@Component
struct ImageAnimatorPage {
  //创建一个动画数组
  images: ImageFrameInfo[] = [
    { src: $r('app.media.sa1') },
    { src: $r('app.media.sa2') },
    { src: $r('app.media.sa3') },
    { src: $r('app.media.sa4') }
  ]
  //创建一个播放控制器
  @State state: AnimationStatus = AnimationStatus.Initial //动画初始状态

  build() {
    Column({space:15}) {
      ImageAnimator()
        .animatorFancy()//公共样式组件
        .images(this.images)//动画数组
        .duration(this.images.length * 1000)//动画播放的时长  时长为:数组的长度乘以1秒
        .state(this.state)//状态为初始状态
        .iterations(-1) //播放次数 当播放次数为-1时,将无限播放

      Row() {
        Button('启动').onClick(() => {
          this.state = AnimationStatus.Running//动画播放状态
        })
        Button('暂停').onClick(() => {
          this.state = AnimationStatus.Paused//动画处于暂停状态
        })
        Button('停止').onClick(() => {
          this.state = AnimationStatus.Stopped//动画处于停止状态
        })
      }
      .width('100%')
      .justifyContent(FlexAlign.SpaceEvenly)

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

  }

  //定义一个重用样式
  @Styles
  /* 
  @Styles装饰器可以将多条样式设置提炼成一个方法,直接在组件声明的位置调用。
  通过@Styles装饰器可以快速定义并复用自定义样式。用于快速定义并复用自定义样式*/
  animatorFancy(){
    .width(300)//宽300
    .aspectRatio(2)//宽高比例 高为150VP
    .padding(10)//内边距10VP
  }
}

代码效果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值