• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# ImageAnimator
2
3提供帧动画组件来实现逐帧播放图片的能力,可以配置需要播放的图片列表,每张图片可以配置时长。
4
5>  **说明:**
6>
7>  该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10## 权限列表
11
1213
14
15## 子组件
16
1718
19
20## 接口
21
22ImageAnimator()
23
24
25## 属性
26
27| 参数名称   | 参数类型                                                     | 默认值   | 必填 | 参数描述                                                     |
28| ---------- | ------------------------------------------------------------ | -------- | ---- | ------------------------------------------------------------ |
29| images     | Array&lt;{<br/>src: string,<br/>width?: number \| string,<br/>height?: number \| string,<br/>top?: number \| string,<br/>left?: number \| string,<br/>duration?: number<br/>}&gt; | []       | 是   | 设置图片帧信息集合。每一帧的帧信息包含图片路径、图片大小、图片位置和图片播放时长信息。详细说明:<br/>- src:图片路径,图片格式为svg,png和jpg。<br/>- width:图片宽度。<br/>- height:图片高度。<br/>- top:图片相对于组件左上角的纵向坐标。<br/>- left:图片相对于组件左上角的横向坐标。<br/>- duration:每一帧图片的播放时长,单位毫秒。 |
30| state      | [AnimationStatus](ts-appendix-enums.md#animationstatus)      | Initial  | 否   | 默认为初始状态,用于控制播放状态。                           |
31| duration   | number                                                       | 1000     | 否   | 单位为毫秒,默认时长为1000ms。<br/>duration为0时,不播放图片。<br/>值的改变只会在下一次循环开始时生效。<br/>当images中设置了单独的duration后,该属性设置无效。 |
32| reverse    | boolean                                                      | false    | 否   | 设置播放顺序。false表示从第1张图片播放到最后1张图片;&nbsp;true表示从最后1张图片播放到第1张图片。 |
33| fixedSize  | boolean                                                      | true     | 否   | 设置图片大小是否固定为组件大小。&nbsp;true表示图片大小与组件大小一致,此时设置图片的width&nbsp;、height&nbsp;、top&nbsp;和left属性是无效的。false表示每一张图片的&nbsp;width&nbsp;、height&nbsp;、top和left属性都要单独设置。 |
34| preDecode  | number                                                       | 0        | 否   | 是否启用预解码,默认值为0,即不启用预解码,如该值设为2,则播放当前页时会提前加载后面两张图片至缓存以提升性能。 |
35| fillMode   | [FillMode](ts-appendix-enums.md#fillmode)                    | Forwards | 否   | 设置动画开始前和结束后的状态,可选值参见FillMode说明。       |
36| iterations | number                                                       | 1        | 否   | 默认播放一次,设置为-1时表示无限次播放。                     |
37
38## 事件
39
40| 名称                              | 功能描述            |
41| ------------------------------- | --------------- |
42| onStart(event:&nbsp;()&nbsp;=&gt;&nbsp;void)  | 状态回调,动画开始播放时触发。 |
43| onPause(event:&nbsp;()&nbsp;=&gt;&nbsp;void)  | 状态回调,动画暂停播放时触发。 |
44| onRepeat(event:&nbsp;()&nbsp;=&gt;&nbsp;void) | 状态回调,动画重新播放时触发。 |
45| onCancel(event:&nbsp;()&nbsp;=&gt;&nbsp;void) | 状态回调,动画取消播放时触发。 |
46| onFinish(event:&nbsp;()&nbsp;=&gt;&nbsp;void) | 状态回调,动画播放完成时触发。 |
47
48
49## 示例
50
51```ts
52// xxx.ets
53@Entry
54@Component
55struct ImageAnimatorExample {
56  @State state: AnimationStatus = AnimationStatus.Initial
57  @State reverse: boolean = false
58  @State iterations: number = 1
59
60  build() {
61    Column({ space:5 }) {
62      ImageAnimator()
63        .images([
64          {
65            //comment文件夹与pages同级
66            src: '/comment/bg1.jpg',
67            duration: 500,
68            width: 325,
69            height: 200,
70            top: 0,
71            left: 0
72          },
73          {
74            src: '/comment/bg2.jpg',
75            duration: 500,
76            width: 325,
77            height: 200,
78            top: 0,
79            left: 0
80          },
81          {
82            src: '/comment/bg3.jpg',
83            duration: 500,
84            width: 325,
85            height: 200,
86            top: 0,
87            left: 0
88          },
89          {
90            src: '/comment/bg4.jpg',
91            duration: 500,
92            width: 325,
93            height: 200,
94            top: 0,
95            left: 0
96          }
97        ])
98        .state(this.state).reverse(this.reverse).fixedSize(false).preDecode(2)
99        .fillMode(FillMode.None).iterations(this.iterations).width(325).height(210)
100        .margin({top:100})
101        .onStart(() => { // 当帧动画开始播放后触发
102          console.info('Start')
103        })
104        .onPause(() => {
105          console.info('Pause')
106        })
107        .onRepeat(() => {
108          console.info('Repeat')
109        })
110        .onCancel(() => {
111          console.info('Cancel')
112        })
113        .onFinish(() => { // 当帧动画播放完成后触发
114          console.info('Finish')
115        })
116      Row() {
117        Button('start').width(100).padding(5).onClick(() => {
118          this.state = AnimationStatus.Running
119        })
120        Button('pause').width(100).padding(5).onClick(() => {
121          this.state = AnimationStatus.Paused
122        })
123        Button('stop').width(100).padding(5).onClick(() => {
124          this.state = AnimationStatus.Stopped
125        })
126      }
127      Row() {
128        Button('reverse').width(100).padding(5).onClick(() => {
129          this.reverse = !this.reverse
130        })
131        Button('once').width(100).padding(5).onClick(() => {
132          this.iterations = 1
133        })
134        Button('iteration').width(100).padding(5).onClick(() => {
135          this.iterations = -1
136        })
137      }
138    }.width('100%').height('100%').backgroundColor(0xF1F3F5)
139  }
140}
141```
142
143![zh-cn_image_0000001219662643](figures/zh-cn_image_0000001219662643.gif)
144