Lottie動畫

2024-01-22 18:16 更新

提供Lottie動畫。

說明

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

導(dǎo)入模塊

  1. import lottie from '@ohos/lottie'
說明

在第一次使用Lottie之前,需要在Terminal窗口運行ohpm install @ohos/lottie 命令下載Lottie。

lottie.loadAnimation

loadAnimation(path: string, container: object, render: string, loop: boolean, autoplay: boolean, name: string ): AnimationItem

加載動畫,須提前聲明Animator('__lottie_ets')對象,并在Canvas完成布局后調(diào)用??膳浜螩anvas組件生命周期接口onReady()使用。

參數(shù):

參數(shù)

類型

必填

描述

path

string

hap包內(nèi)動畫資源文件路徑,僅支持json格式。示例:path: "common/lottie/data.json"

container

object

canvas繪圖上下文,聲明范式需提前聲明CanvasRenderingContext2D。

render

string

渲染類型,僅支持“canvas”。

loop

boolean | number

動畫播放結(jié)束后,是否循環(huán)播放,默認值true。值類型為number,且大于等于1時為設(shè)置的重復(fù)播放的次數(shù)。

autoplay

boolean

是否自動播放動畫,默認值true。

name

string

開發(fā)者自定義的動畫名稱,后續(xù)支持通過該名稱引用控制動畫,默認為空。

initialSegment

[number, number]

指定動畫播放的起始幀號,指定動畫播放的結(jié)束幀號。

lottie.destroy

destroy(name: string): void

銷毀動畫,頁面退出時,必須調(diào)用??膳浜螩anvas組件生命周期接口使用,比如onDisappear()與onPageHide()。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,同loadAnimation接口參數(shù)name, 缺省時銷毀所有動畫。

示例:

  1. // xxx.ets
  2. import lottie from '@ohos/lottie'
  3. @Entry
  4. @Component
  5. struct Index {
  6. private controller: CanvasRenderingContext2D = new CanvasRenderingContext2D()
  7. private animateName: string = "animate"
  8. private animatePath: string = "common/lottie/data.json"
  9. private animateItem: any = null
  10. onPageHide(): void {
  11. console.log('onPageHide')
  12. lottie.destroy()
  13. }
  14. build() {
  15. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  16. Canvas(this.controller)
  17. .width('30%')
  18. .height('20%')
  19. .backgroundColor('#0D9FFB')
  20. .onReady(() => {
  21. console.log('canvas onAppear');
  22. this.animateItem = lottie.loadAnimation({
  23. container: this.controller,
  24. renderer: 'canvas',
  25. loop: true,
  26. autoplay: true,
  27. name: this.animateName,
  28. path: this.animatePath,
  29. })
  30. })
  31. Button('load animation')
  32. .onClick(() => {
  33. if (this.animateItem != null) {
  34. this.animateItem.destroy()
  35. this.animateItem = null
  36. }
  37. this.animateItem = lottie.loadAnimation({
  38. container: this.controller,
  39. renderer: 'canvas',
  40. loop: true,
  41. autoplay: true,
  42. name: this.animateName,
  43. path: this.animatePath,
  44. initialSegment: [10, 50],
  45. })
  46. })
  47. Button('destroy animation')
  48. .onClick(() => {
  49. lottie.destroy(this.animateName)
  50. this.animateItem = null
  51. })
  52. }
  53. .width('100%')
  54. .height('100%')
  55. }
  56. }

lottie.play

play(name: string): void

播放指定動畫。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名, 同loadAnimation接口參數(shù)name,缺省時播放所有動畫。

示例:

  1. lottie.play(this.animateName)

lottie.pause

pause(name: string): void

暫停指定動畫,下次調(diào)用lottie.play()從當前幀開始。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,同loadAnimation接口入?yún)ame,缺省時暫停所有動畫。

示例:

  1. lottie.pause(this.animateName)

lottie.togglePause

togglePause(name: string): void

暫?;虿シ胖付▌赢?,等效于lottie.play()與lottie.pause()切換調(diào)用。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,同loadAnimation接口參數(shù)name,缺省時停止所有動畫。

示例:

  1. lottie.togglePause(this.animateName)

lottie.stop

stop(name: string): void

停止指定動畫,下次調(diào)用lottie.play()從第一幀開始。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,同loadAnimation接口參數(shù)name,缺省時停止所有動畫。

示例:

  1. lottie.stop(this.animateName)

lottie.setSpeed

setSpeed(speed: number, name: string): void

設(shè)置指定動畫播放速度。

參數(shù):

參數(shù)

類型

必填

描述

speed

number

值為浮點類型, speed>0正向播放, speed<0反向播放, speed=0暫停播放, speed=1.0/-1.0正常速度播放。

name

string

被指定的動畫,同loadAnimation接口參數(shù)name,缺省時停止所有動畫。

示例:

  1. lottie.setSpeed(5, this.animateName)

lottie.setDirection

setDirection(direction: AnimationDirection, name: string): void

設(shè)置指定動畫播放順序。

參數(shù):

參數(shù)

類型

必填

描述

direction

AnimationDirection

1為正向,-1為反向; 當設(shè)置為反向時,從當前播放進度開始回播直到首幀,loop值為true時可無限倒放;speed<0疊加時也是倒放。

AnimationDirection:1 | -1

name

string

被指定的動畫名,同loadAnimation接口參數(shù)name,缺省時設(shè)置所有動畫方向。

示例:

  1. lottie.setDirection(-1, this.animateName)

AnimationItem

loadAnimation接口的返回對象,具有屬性與接口。屬性描述如下:

參數(shù)名稱

參數(shù)類型

參數(shù)描述

name

string

動畫名稱。

isLoaded

boolean

動畫是否已加載。

currentFrame

number

當前播放的幀號, 默認精度為>=0.0的浮點數(shù), 調(diào)用setSubframe(false)后精度為去小數(shù)點后的正整數(shù)。

currentRawFrame

number

當前播放幀數(shù), 精度為>=0.0的浮點數(shù)。

firstFrame

number

當前播放片段的第一幀幀號。

totalFrames

number

當前播放片段的總幀數(shù)。

frameRate

number

幀率 (frame/s)。

frameMult

number

幀率 (frame/ms)。

playSpeed

number

值為浮點類型, speed>0正向播放, speed<0反向播放, speed=0暫停播放, speed=1.0 | -1.0正常速度播放。

playDirection

number

播放方向, 1為正放, -1為倒放。

playCount

number

動畫完成播放的次數(shù)。

isPaused

boolean

當前動畫是否已暫停, 值為true動畫已暫停。

autoplay

boolean

加載動畫后是否自動播放, 若值為false需要再調(diào)用play()接口開始播放。

loop

boolean | number

類型為boolean時是否循環(huán)播放, 類型為number時播放次數(shù)。

renderer

any

動畫渲染對象, 根據(jù)渲染類型而定。

animationID

string

動畫ID。

timeCompleted

number

當前動畫片段完成單次播放的幀數(shù), 受AnimationSegment設(shè)置影響, 與totalFrames屬性值相同。

segmentPos

number

當前動畫片段序號, 值為>=0的正整數(shù)。

isSubframeEnabled

boolean

關(guān)聯(lián)了currentFrame的精度是否為浮點數(shù)。

segments

AnimationSegment | AnimationSegment[]

當前動畫的播放片段。

AnimationItem.play

play(name?: string): void

播放動畫。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,缺省默認為空。

示例:

  1. this.animateItem.play()

AnimationItem.destroy

destroy(name?: string): void

銷毀動畫。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,缺省默認為空。

示例:

  1. this.animateItem.destroy()

AnimationItem.pause

pause(name?: string): void

暫停動畫,下次調(diào)用play接口從當前幀開始播放。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,缺省默認為空。

示例:

  1. this.animateItem.pause()

AnimationItem.togglePause

togglePause(name?: string): void

暫?;虿シ艅赢?,等效于play接口與pause接口之間輪換調(diào)用。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,缺省默認為空。

示例:

  1. this.animateItem.togglePause()

AnimationItem.stop

stop(name?: string): void

停止動畫,下次調(diào)用play接口從第一幀開始播放。

參數(shù):

參數(shù)

類型

必填

描述

name

string

被指定的動畫名,缺省默認為空。

示例:

  1. this.animateItem.stop()

AnimationItem.setSpeed

setSpeed(speed: number): void

設(shè)置動畫播放速度。

參數(shù):

參數(shù)

類型

必填

描述

speed

number

值為浮點類型, speed>0正向播放, speed<0反向播放, speed=0暫停播放, speed=1.0 | -1.0正常速度播放。

示例:

  1. this.animateItem.setSpeed(5);

AnimationItem.setDirection

setDirection(direction: AnimationDirection): void

設(shè)置動畫播放順序。

參數(shù):

參數(shù)

類型

必填

描述

direction

AnimationDirection

1為正向,-1為反向; 當設(shè)置為反向時,從當前播放進度開始回播直到首幀,loop值為true時可無限倒放;speed<0疊加時也是倒放。

AnimationDirection:1 | -1。

示例:

  1. this.animateItem.setDirection(-1)

AnimationItem.goToAndStop

goToAndStop(value: number, isFrame?: boolean): void

設(shè)置動畫停止在指定幀或時間進度。

參數(shù):

參數(shù)

類型

必填

描述

value

number

幀號(值大于等于0)或時間進度(ms)。

isFrame

boolean

true: 按指定幀控制,false:按指定時間控制,缺省默認false。

name

string

被指定的動畫名,缺省默認為空。

示例:

  1. // 按幀號控制
  2. this.animateItem.goToAndStop(25, true)
  3. // 按時間進度控制
  4. this.animateItem.goToAndStop(300, false, this.animateName)

AnimationItem.goToAndPlay

goToAndPlay(value: number, isFrame: boolean, name?: string): void

設(shè)置動畫從指定幀或時間進度開始播放。

參數(shù):

參數(shù)

類型

必填

描述

value

number

幀號(值大于等于0)或時間進度(ms)

isFrame

boolean

true:按指定幀控制, false:按指定時間控制,缺省默認false。

name

string

被指定的動畫名,缺省默認為空。

示例:

  1. // 按幀號控制
  2. this.animateItem.goToAndPlay(25, true)
  3. // 按時間進度控制
  4. this.animateItem.goToAndPlay(300, false, this.animateName)

AnimationItem.playSegments

playSegments(segments: AnimationSegment | AnimationSegment[], forceFlag: boolean): void

設(shè)置動畫僅播放指定片段。

參數(shù):

參數(shù)

類型

必填

描述

segments

AnimationSegment = [number, number] | AnimationSegment[]

片段或片段列表;

如果片段列表全部播放完畢后,下輪循環(huán)播放僅播放最后一個片段

forceFlag

boolean

true:即時生效播放,false:延遲到下輪循環(huán)播放再生效

示例:

  1. // 指定播放片段
  2. this.animateItem.playSegments([10, 20], false)
  3. // 指定播放片段列表
  4. this.animateItem.playSegments([[0, 5], [20, 30]], true)

AnimationItem.resetSegments

resetSegments(forceFlag: boolean): void

重置動畫播放片段,播放全幀。

參數(shù):

參數(shù)

類型

必填

描述

forceFlag

boolean

true:即時生效播放,false:延遲到下輪循環(huán)播放再生效

示例:

  1. this.animateItem.resetSegments(true)

AnimationItem.resize

resize(): void

刷新動畫布局。

示例:

  1. this.animateItem.resize()

AnimationItem.setSubframe

setSubframe(useSubFrame: boolean): void

設(shè)置屬性currentFrame的精度顯示浮點數(shù)。

參數(shù):

參數(shù)

類型

必填

描述

useSubFrames

boolean

currentFrame屬性默認顯示浮點數(shù),該接口參數(shù)將影響currentFrame屬性的精度。

true:屬性currentFrame顯示浮點。

false:屬性currentFrame去浮點數(shù)顯示整數(shù)。

示例:

  1. this.animateItem.setSubframe(false)

AnimationItem.getDuration

getDuration(inFrames?: boolean): void

獲取動畫單次完整播放的時間(與播放速度無關(guān))或幀數(shù), 與Lottie.loadAnimation接口入?yún)nitialSegment有關(guān)。

參數(shù):

參數(shù)

類型

必填

描述

inFrames

boolean

true:獲取幀數(shù), false:獲取時間(單位ms),缺省默認false。

示例:

  1. this.animateItem.getDuration(true)

AnimationItem.addEventListener

addEventListener<T = any>(name: AnimationEventName, callback: AnimationEventCallback<T>): () => void

添加偵聽事件, 事件完成后會觸發(fā)指定回調(diào)函數(shù)。返回可刪除該偵聽事件的函數(shù)對象。

參數(shù):

參數(shù)

類型

必填

描述

name

AnimationEventName

指定動畫事件類型,Lottie內(nèi)置動畫事件類型AnimationEventName:

'enterFrame'、'loopComplete'、'complete'、'segmentStart'、'destroy'、'config_ready'、'data_ready'、'DOMLoaded'、'error'、'data_failed'、'loaded_images'

callback

AnimationEventCallback<T>

用戶自定義回調(diào)函數(shù)

示例:

  1. private callbackItem: any = function() {
  2. console.log("grunt loopComplete")
  3. }
  4. let delFunction = this.animateItem.addEventListener('loopComplete', this.animateName)
  5. // 刪除偵聽
  6. delFunction()

AnimationItem.removeEventListener

removeEventListener<T = any>(name: AnimationEventName, callback?: AnimationEventCallback<T>): void

刪除偵聽事件。

參數(shù):

參數(shù)

類型

必填

描述

name

AnimationEventName

指定動畫事件類型,Lottie內(nèi)置動畫事件類型AnimationEventName:

'enterFrame'、'loopComplete'、'complete'、'segmentStart'、'destroy'、'config_ready'、'data_ready'、'DOMLoaded'、'error'、'data_failed'、'loaded_images'

callback

AnimationEventCallback<T>

用戶自定義回調(diào)函數(shù);缺省為空時,刪除此事件的所有回調(diào)函數(shù)。

示例:

  1. this.animateItem.removeEventListener('loopComplete', this.animateName)

AnimationItem.triggerEvent

triggerEvent<T = any>(name: AnimationEventName, args: T): void

直接觸發(fā)指定事件的所有已設(shè)置的回調(diào)函數(shù)。

參數(shù):

參數(shù)

類型

必填

描述

name

AnimationEventName

指定動畫事件類型

args

any

用戶自定義回調(diào)參數(shù)

示例:

  1. private triggerCallBack: any = function(item) {
  2. console.log("trigger loopComplete, name:" + item.name)
  3. }
  4. this.animateItem.addEventListener('loopComplete', this.triggerCallBack)
  5. this.animateItem.triggerEvent('loopComplete', this.animateItem)
  6. this.animateItem.removeEventListener('loopComplete', this.triggerCallBack)
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號