顯式動(dòng)畫(huà)

2024-01-22 18:17 更新

提供全局animateTo顯式動(dòng)畫(huà)接口來(lái)指定由于閉包代碼導(dǎo)致的狀態(tài)變化插入過(guò)渡動(dòng)效。

說(shuō)明

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

animateTo(value: AnimateParam, event: () => void): void

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

參數(shù)

類(lèi)型

是否必填

描述

value

AnimateParam

設(shè)置動(dòng)畫(huà)效果相關(guān)參數(shù)。

event

() => void

指定顯示動(dòng)效的閉包函數(shù),在閉包函數(shù)中導(dǎo)致的狀態(tài)變化系統(tǒng)會(huì)自動(dòng)插入過(guò)渡動(dòng)畫(huà)。

AnimateParam對(duì)象說(shuō)明

名稱(chēng)

類(lèi)型

描述

duration

number

動(dòng)畫(huà)持續(xù)時(shí)間,單位為毫秒。

默認(rèn)值:1000

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明:

- 在ArkTS卡片上最大動(dòng)畫(huà)持續(xù)時(shí)間為1000毫秒,若超出則固定為1000毫秒。

- 設(shè)置浮點(diǎn)型類(lèi)型的值時(shí),向下取整。例如,設(shè)置值為1.2,按照1處理。

tempo

number

動(dòng)畫(huà)的播放速度,值越大動(dòng)畫(huà)播放越快,值越小播放越慢,為0時(shí)無(wú)動(dòng)畫(huà)效果。

默認(rèn)值:1.0

curve

Curve | ICurve | string

動(dòng)畫(huà)曲線。

默認(rèn)值:Curve.EaseInOut

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

delay

number

單位為ms(毫秒),默認(rèn)不延時(shí)播放。

默認(rèn)值:0

說(shuō)明:

- 設(shè)置浮點(diǎn)型類(lèi)型的值時(shí),向下取整。例如,設(shè)置值為1.2,按照1處理。

iterations

number

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

默認(rèn)值:1

playMode

PlayMode

設(shè)置動(dòng)畫(huà)播放模式,默認(rèn)播放完成后重頭開(kāi)始播放。

默認(rèn)值:PlayMode.Normal

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

相關(guān)使用約束請(qǐng)參考PlayMode說(shuō)明。

onFinish

() => void

動(dòng)效播放完成回調(diào)。

從API version 9開(kāi)始,該接口支持在ArkTS卡片中使用。

說(shuō)明
  • PlayMode推薦使用PlayMode.Normal和PlayMode.Alternate,此場(chǎng)景下動(dòng)畫(huà)的第一輪是正向播放的。如使用PlayMode.Reverse和PlayMode.AlternateReverse,則動(dòng)畫(huà)的第一輪是逆向播放的,在動(dòng)畫(huà)剛開(kāi)始時(shí)會(huì)跳變到終止?fàn)顟B(tài),然后逆向播放動(dòng)畫(huà)。
  • 使用PlayMode.Alternate或PlayMode.AlternateReverse時(shí),開(kāi)發(fā)者應(yīng)保證動(dòng)畫(huà)最終狀態(tài)和狀態(tài)變量的取值一致,即應(yīng)保證動(dòng)畫(huà)的最后一輪是正向播放的。使用PlayMode.Alternate時(shí),iterations應(yīng)為奇數(shù)。使用PlayMode.AlternateReverse時(shí),iterations應(yīng)為偶數(shù)。
  • 不推薦使用PlayMode.Reverse,此場(chǎng)景下不僅會(huì)導(dǎo)致動(dòng)畫(huà)剛開(kāi)始就跳變到終止?fàn)顟B(tài),也會(huì)導(dǎo)致動(dòng)畫(huà)最終狀態(tài)和狀態(tài)變量的取值不同。

示例

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct AnimateToExample {
  5. @State widthSize: number = 250
  6. @State heightSize: number = 100
  7. @State rotateAngle: number = 0
  8. private flag: boolean = true
  9. build() {
  10. Column() {
  11. Button('change size')
  12. .width(this.widthSize)
  13. .height(this.heightSize)
  14. .margin(30)
  15. .onClick(() => {
  16. if (this.flag) {
  17. animateTo({
  18. duration: 2000,
  19. curve: Curve.EaseOut,
  20. iterations: 3,
  21. playMode: PlayMode.Normal,
  22. onFinish: () => {
  23. console.info('play end')
  24. }
  25. }, () => {
  26. this.widthSize = 150
  27. this.heightSize = 60
  28. })
  29. } else {
  30. animateTo({}, () => {
  31. this.widthSize = 250
  32. this.heightSize = 100
  33. })
  34. }
  35. this.flag = !this.flag
  36. })
  37. Button('change rotate angle')
  38. .margin(50)
  39. .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle })
  40. .onClick(() => {
  41. animateTo({
  42. duration: 1200,
  43. curve: Curve.Friction,
  44. delay: 500,
  45. iterations: -1, // 設(shè)置-1表示動(dòng)畫(huà)無(wú)限循環(huán)
  46. playMode: PlayMode.Alternate,
  47. onFinish: () => {
  48. console.info('play end')
  49. }
  50. }, () => {
  51. this.rotateAngle = 90
  52. })
  53. })
  54. }.width('100%').margin({ top: 5 })
  55. }
  56. }

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)