幀動(dòng)畫組件

2024-01-22 17:12 更新

提供幀動(dòng)畫組件來實(shí)現(xiàn)逐幀播放圖片的能力,可以配置需要播放的圖片列表,每張圖片可以配置時(shí)長。

說明

該組件從API Version 7開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。

子組件

接口

ImageAnimator()

屬性

除支持通用屬性外,還支持以下屬性:

參數(shù)名稱

參數(shù)類型

參數(shù)描述

images

Array<ImageFrameInfo>

設(shè)置圖片幀信息集合。每一幀的幀信息(ImageFrameInfo)包含圖片路徑、圖片大小、圖片位置和圖片播放時(shí)長信息,詳見ImageFrameInfo屬性說明。

默認(rèn)值:[]

說明:

不支持動(dòng)態(tài)更新。

state

AnimationStatus

默認(rèn)為初始狀態(tài),用于控制播放狀態(tài)。

默認(rèn)值:AnimationStatus.Initial

duration

number

單位為毫秒,默認(rèn)時(shí)長為1000ms;duration為0時(shí),不播放圖片;值的改變只會(huì)在下一次循環(huán)開始時(shí)生效;當(dāng)images中任意一幀圖片設(shè)置了單獨(dú)的duration后,該屬性設(shè)置無效。

默認(rèn)值:1000

reverse

boolean

設(shè)置播放順序。false表示從第1張圖片播放到最后1張圖片; true表示從最后1張圖片播放到第1張圖片。

默認(rèn)值:false

fixedSize

boolean

設(shè)置圖片大小是否固定為組件大小。 true表示圖片大小與組件大小一致,此時(shí)設(shè)置圖片的width 、height 、top 和left屬性是無效的。false表示每一張圖片的width 、height 、top和left屬性都要單獨(dú)設(shè)置。

默認(rèn)值:true

preDecode(deprecated)

number

預(yù)解碼的圖片數(shù)量。例如該值設(shè)為2,則播放當(dāng)前頁時(shí)會(huì)提前加載后面兩張圖片至緩存以提升性能。

從API version9開始廢棄。

默認(rèn)值:0

fillMode

FillMode

設(shè)置動(dòng)畫開始前和結(jié)束后的狀態(tài),可選值參見FillMode說明。

默認(rèn)值:FillMode.Forwards

iterations

number

默認(rèn)播放一次,設(shè)置為-1時(shí)表示無限次播放。

默認(rèn)值:1

ImageFrameInfo對象說明

參數(shù)名稱

參數(shù)類型

必填

參數(shù)描述

src

string | Resource9+

圖片路徑,圖片格式為svg,png和jpg,從API Version9開始支持Resource類型的路徑。

width

number | string

圖片寬度。

默認(rèn)值:0

height

number | string

圖片高度。

默認(rèn)值:0

top

number | string

圖片相對于組件左上角的縱向坐標(biāo)。

默認(rèn)值:0

left

number | string

圖片相對于組件左上角的橫向坐標(biāo)。

默認(rèn)值:0

duration

number

每一幀圖片的播放時(shí)長,單位毫秒。

默認(rèn)值:0

事件

除支持通用事件外,還支持以下事件:

名稱

功能描述

onStart(event: () => void)

狀態(tài)回調(diào),動(dòng)畫開始播放時(shí)觸發(fā)。

onPause(event: () => void)

狀態(tài)回調(diào),動(dòng)畫暫停播放時(shí)觸發(fā)。

onRepeat(event: () => void)

狀態(tài)回調(diào),動(dòng)畫重復(fù)播放時(shí)觸發(fā)。

onCancel(event: () => void)

狀態(tài)回調(diào),動(dòng)畫取消播放時(shí)觸發(fā)。

onFinish(event: () => void)

狀態(tài)回調(diào),動(dòng)畫播放完成時(shí)觸發(fā)。

示例

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ImageAnimatorExample {
  5. @State state: AnimationStatus = AnimationStatus.Initial
  6. @State reverse: boolean = false
  7. @State iterations: number = 1
  8. build() {
  9. Column({ space: 10 }) {
  10. ImageAnimator()
  11. .images([
  12. {
  13. src: $r('app.media.img1')
  14. },
  15. {
  16. src: $r('app.media.img2')
  17. },
  18. {
  19. src: $r('app.media.img3')
  20. },
  21. {
  22. src: $r('app.media.img4')
  23. }
  24. ])
  25. .duration(2000)
  26. .state(this.state).reverse(this.reverse)
  27. .fillMode(FillMode.None).iterations(this.iterations).width(340).height(240)
  28. .margin({ top: 100 })
  29. .onStart(() => {
  30. console.info('Start')
  31. })
  32. .onPause(() => {
  33. console.info('Pause')
  34. })
  35. .onRepeat(() => {
  36. console.info('Repeat')
  37. })
  38. .onCancel(() => {
  39. console.info('Cancel')
  40. })
  41. .onFinish(() => {
  42. console.info('Finish')
  43. this.state = AnimationStatus.Stopped
  44. })
  45. Row() {
  46. Button('start').width(100).padding(5).onClick(() => {
  47. this.state = AnimationStatus.Running
  48. }).margin(5)
  49. Button('pause').width(100).padding(5).onClick(() => {
  50. this.state = AnimationStatus.Paused // 顯示當(dāng)前幀圖片
  51. }).margin(5)
  52. Button('stop').width(100).padding(5).onClick(() => {
  53. this.state = AnimationStatus.Stopped // 顯示動(dòng)畫的起始幀圖片
  54. }).margin(5)
  55. }
  56. Row() {
  57. Button('reverse').width(100).padding(5).onClick(() => {
  58. this.reverse = !this.reverse
  59. }).margin(5)
  60. Button('once').width(100).padding(5).onClick(() => {
  61. this.iterations = 1
  62. }).margin(5)
  63. Button('infinite').width(100).padding(5).onClick(() => {
  64. this.iterations = -1 // 無限循環(huán)播放
  65. }).margin(5)
  66. }
  67. }.width('100%').height('100%')
  68. }
  69. }

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號