0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Lottie組件提升ArkUI開發(fā)框架的動(dòng)畫能力

HarmonyOS開發(fā)者 ? 來源:HarmonyOS開發(fā)者 ? 作者:HarmonyOS開發(fā)者 ? 2022-02-25 13:16 ? 次閱讀

動(dòng)畫是UI界面的重要元素之一,精心設(shè)計(jì)的動(dòng)畫能使UI界面更直觀,有助于改進(jìn)應(yīng)用程序的外觀并改善用戶體驗(yàn)。

ArkUI開發(fā)框架為開發(fā)者提供了豐富的動(dòng)畫能力,如屬性動(dòng)畫、轉(zhuǎn)場(chǎng)動(dòng)畫及自定義動(dòng)畫等。這些動(dòng)畫能力幫助開發(fā)者美化了UI界面,但不適用于繪制某些比較復(fù)雜的動(dòng)畫,例如,屬性動(dòng)畫主要針對(duì)動(dòng)畫的通用屬性進(jìn)行動(dòng)態(tài)變化,內(nèi)容動(dòng)效不夠豐富,且變更時(shí)需要修改或重寫代碼;Gif動(dòng)態(tài)圖放大后鋸齒明顯,精度越高占用存儲(chǔ)空間越大,直接影響安裝包的大小;svg動(dòng)畫DOM節(jié)點(diǎn)多開銷大,缺乏與用戶的交互。因此,我們引入了比較成熟的Lottie組件,提升了ArkUI開發(fā)框架的動(dòng)畫能力。

一、Lottie介紹

1 什么是Lottie?

Lottie是一款能夠?yàn)閼?yīng)用添加動(dòng)畫的開源組件,它可以解析AE(After Effects)導(dǎo)出的json文件,讓復(fù)雜的動(dòng)畫資源輕松運(yùn)行在應(yīng)用程序中。如圖1所示,動(dòng)畫文件通過AE的bodymovin插件轉(zhuǎn)換成通用的json格式描述文件后,應(yīng)用開發(fā)者只需使用Lottie解析json文件,就能將動(dòng)畫繪制出來。

Lottie組件提升ArkUI開發(fā)框架的動(dòng)畫能力

圖1 整體流程

2 Lottie繪制流程

Lottie解析json格式的動(dòng)畫描述文件后,會(huì)基于canvas 畫布進(jìn)行2D渲染,并結(jié)合原生組件Animator實(shí)現(xiàn)動(dòng)畫效果。具體繪制流程如下圖2所示:

Lottie組件提升ArkUI開發(fā)框架的動(dòng)畫能力

圖2 lottie繪制流程

動(dòng)畫加載準(zhǔn)備,在使用Lottie加載動(dòng)畫前需先通過插件 bodymovin 將AE生成的動(dòng)畫文件轉(zhuǎn)換為通用的 json 格式描述文件。開發(fā)者也可以從互聯(lián)網(wǎng)獲取合適的動(dòng)畫資源直接應(yīng)用。

獲取json文件中的動(dòng)畫數(shù)據(jù)。

解析json文件中的動(dòng)畫數(shù)據(jù)。

創(chuàng)建動(dòng)畫實(shí)例,設(shè)置動(dòng)畫信息。

初始化布局寬高,設(shè)置繪制樣式等信息。

啟動(dòng)動(dòng)畫,觸發(fā)逐幀繪制。

更新動(dòng)畫進(jìn)度。

返回動(dòng)畫實(shí)例,通過loadAnimation()接口返回動(dòng)畫實(shí)例AnimationItem。

控制動(dòng)畫,Lottie提供了一整套簡潔易用API,如停止stop()、暫停pause()、播放play()、播放流轉(zhuǎn)togglePause()、方向setDirection()、速度setSpeed()等。

3 Lottie優(yōu)點(diǎn)

通過上文的介紹,我們可以總結(jié)出Lottie的以下優(yōu)點(diǎn):

只需使用Lottie解析json文件就能實(shí)現(xiàn)動(dòng)畫的加載,基本上實(shí)現(xiàn)了0代碼開發(fā)。

應(yīng)用開發(fā)者可以通過修改json文件的參數(shù),將動(dòng)畫運(yùn)行到不同的應(yīng)用程序中,實(shí)現(xiàn)動(dòng)畫的一次設(shè)計(jì)多端使用。

應(yīng)用開發(fā)者可從網(wǎng)絡(luò)直接下載json文件,實(shí)時(shí)更新動(dòng)畫資源。

Lottie基于canvas 畫布進(jìn)行基礎(chǔ)的2D渲染,讓動(dòng)畫流暢度更高。

Lottie可以將UX設(shè)計(jì)師給出的復(fù)雜動(dòng)畫效果100%還原到應(yīng)用程序中 。

Lottie提供了豐富的API,讓開發(fā)者能輕松控制動(dòng)畫,大大提高了開發(fā)效率。

通過上文的介紹,我們可以總結(jié)出Lottie的以下優(yōu)點(diǎn):

只需使用Lottie解析json文件就能實(shí)現(xiàn)動(dòng)畫的加載,基本上實(shí)現(xiàn)了0代碼開發(fā)。

應(yīng)用開發(fā)者可以通過修改json文件的參數(shù),將動(dòng)畫運(yùn)行到不同的應(yīng)用程序中,實(shí)現(xiàn)動(dòng)畫的一次設(shè)計(jì)多端使用。

應(yīng)用開發(fā)者可從網(wǎng)絡(luò)直接下載json文件,實(shí)時(shí)更新動(dòng)畫資源。

Lottie基于canvas 畫布進(jìn)行基礎(chǔ)的2D渲染,讓動(dòng)畫流暢度更高。

Lottie可以將UX設(shè)計(jì)師給出的復(fù)雜動(dòng)畫效果100%還原到應(yīng)用程序中 。

Lottie提供了豐富的API,讓開發(fā)者能輕松控制動(dòng)畫,大大提高了開發(fā)效率。

二、Lottie實(shí)戰(zhàn)

通過上文對(duì)Lottie的介紹,相信很多小伙伴已經(jīng)感受到了Lottie組件的強(qiáng)大,下面我們將通過一個(gè)簡單的動(dòng)畫示例來為大家展示ArkUI開發(fā)框架中Lottie組件的使用。

1 創(chuàng)建項(xiàng)目

如圖3所示,在DevEco Studio中新建Lottis_Test項(xiàng)目,項(xiàng)目類型選擇Application,語言選擇eTS,點(diǎn)擊Finish完成創(chuàng)建。

Lottie組件提升ArkUI開發(fā)框架的動(dòng)畫能力

圖3 創(chuàng)建工程

2 添加依賴

成功創(chuàng)建項(xiàng)目后,接下來就是將Lottie組件下載至項(xiàng)目中。首先,我們需找到npm配置文件,并在.npmrc 配置文件中添加 @ohos 的scope倉庫地址:@ohos:registry=https://repo.harmonyos.com/npm/,如圖4所示:

Lottie組件提升ArkUI開發(fā)框架的動(dòng)畫能力? ???

圖4 指定npm倉庫地址

配置好npm倉庫地址后,如圖5所示,在DevEcoStudio的底部導(dǎo)航欄,點(diǎn)擊“Terminal”(快捷鍵Alt+F12),鍵入命令:npm install @ohos/lottie-ohos-ets并回車,此時(shí)Lottie組件會(huì)自動(dòng)下載至項(xiàng)目中。下載完成后工程根目錄下會(huì)生成node_modules/@ohos/lottie-ohos-ets目錄。

Lottie組件提升ArkUI開發(fā)框架的動(dòng)畫能力

圖5 下載Lottie組件

注:由于目前l(fā)ottie組件正在開源準(zhǔn)備中,@ohos/lottie-ohos-ets倉庫預(yù)計(jì)在3月底發(fā)布,敬請(qǐng)期待。

3 導(dǎo)出動(dòng)畫資源并保存

將After Effects 導(dǎo)出的json動(dòng)畫資源文件保存到項(xiàng)目中,如圖6所示,保存路徑如下:entry/src/main/ets/MainAbility/common/lottie/animation.json,

Lottie組件提升ArkUI開發(fā)框架的動(dòng)畫能力

圖6 json保存路徑

4 編寫邏輯代碼

使用擴(kuò)展的TS語言在工程的index.ets文件中編寫業(yè)務(wù)邏輯代碼 ,為了兼顧資源的及時(shí)釋放,在組件@Component聲明內(nèi)的聲明周期onDisappear()或onPageHide()中調(diào)用lottie.destory()釋放資源。示例代碼如下所示:

importlottiefrom'@ohos/lottie-ohos-ets'@Entry@Componentstruct Index {  private controller: RenderingContext = new RenderingContext();// 動(dòng)畫別名  private animateName: string = "animation";// 動(dòng)畫資源相對(duì)路徑  private animatePath: string = "common/lottie/animation.json";  private onPageHide(): void {    // 隨頁面隱藏銷毀動(dòng)畫    lottie.destroy();  }  build() {    Column() {      // 聲明Animator與Canvas組件      Animator('__lottie_ets')      Canvas(this.controller)        .width('30%')        .height('20%')        .backgroundColor('#ff0000')        .onAppear(() => {          // 隨Canvas布局自動(dòng)加載動(dòng)畫          let anim = lottie.loadAnimation({            container: this.controller,            renderer: 'canvas',            loop: true,            autoplay: true,            name: this.animateName,            path: this.animatePath          })        })      Button('togglePause')        .onClick(() => {          // 聲明button按鍵與設(shè)置點(diǎn)擊事件,通過點(diǎn)擊控制動(dòng)畫暫停與播放的切換          lottie.togglePause(this.animateName);        })    }    .width('100%')    .height('100%')  }}

(左右滑動(dòng),查看更多)

以上就是ArkUI開發(fā)框架中Lottie組件的使用,希望廣大開發(fā)者能利用這個(gè)強(qiáng)大的開源組件開發(fā)出更多精美的應(yīng)用。

原文標(biāo)題:Lottie組件,讓動(dòng)畫繪制更簡單

文章出處:【微信公眾號(hào):HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 界面
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    15623
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3348

    瀏覽量

    42496
  • lottie
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    19794

原文標(biāo)題:Lottie組件,讓動(dòng)畫繪制更簡單

文章出處:【微信號(hào):HarmonyOS_Dev,微信公眾號(hào):HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開發(fā)案例:【購物車app】

    OpenHarmony ArkUI框架提供了豐富的動(dòng)畫組件和接口,開發(fā)者可以根據(jù)實(shí)際場(chǎng)景和開發(fā)
    的頭像 發(fā)表于 05-14 18:19 ?1066次閱讀
    HarmonyOS<b class='flag-5'>開發(fā)</b>案例:【購物車app】

    HarmonyOS Lottie組件,讓動(dòng)畫繪制更簡單

    存儲(chǔ)空間越大,直接影響安裝包的大??;svg動(dòng)畫DOM節(jié)點(diǎn)多開銷大,缺乏與用戶的交互。 因此,我們引入了比較成熟的Lottie組件,提升ArkUI
    發(fā)表于 02-22 14:55

    OpenHarmony 3.1 Release版本關(guān)鍵特性解析——ArkUI框架又有哪些新增能力?

    (以下簡稱 v3.1)版本的發(fā)布,ArkUI 框架也增加了許多新能力,接下來一起看看都有哪些新增能力吧。ArkUI
    發(fā)表于 05-31 18:05

    HDD杭州站?ArkUI開發(fā)更靈活

    HTML5頁面加載特性。 UI開發(fā)效率提升:在交互歸一、多態(tài)樣式自定義、工具鏈體驗(yàn)等方面進(jìn)行了增強(qiáng)和提升,讓開發(fā)更靈活。 圖1 ArkUI
    發(fā)表于 08-05 11:33

    ArkUI框架,更懂程序員的UI信息語法

    支持判斷分屏狀態(tài)、折疊屏展開狀態(tài)等,這樣就解決了我一次開發(fā)多端部署的難題。 同時(shí),ArkUI框架開發(fā)者提供了多態(tài)組件,同一控件在不同的設(shè)備
    發(fā)表于 12-14 11:23

    4天帶你上手HarmonyOS ArkUI開發(fā)——《HarmonyOS ArkUI入門訓(xùn)練營之健康生活實(shí)戰(zhàn)》

    框架組件用法,完成一款健康飲食應(yīng)用的界面開發(fā),結(jié)合DevEco Studio提供的多設(shè)備預(yù)覽能力,體驗(yàn)ArkUI
    發(fā)表于 01-05 11:49

    ArkUI能力,助力應(yīng)用開發(fā)更便捷

    ArkUI是一套構(gòu)建分布式應(yīng)用的聲明式UI開發(fā)框架。它具備簡潔自然的UI信息語法、豐富的UI組件、多維的狀態(tài)管理,以及實(shí)時(shí)界面預(yù)覽等相關(guān)能力
    發(fā)表于 02-15 11:40

    OpenHarmony應(yīng)用開發(fā)-ArkUI方舟開發(fā)框架簡析

    方舟開發(fā)框架(簡稱ArkUI)為OpenHarmony應(yīng)用的UI開發(fā)提供了完整的基礎(chǔ)設(shè)施,包括簡潔的UI語法、豐富的UI功能(組件、布局、
    發(fā)表于 04-23 09:35

    一文詳細(xì)了解ArkUI框架新增能力

    ArkUI是一套UI開發(fā)框架,它提供了開發(fā)者進(jìn)行應(yīng)用UI開發(fā)時(shí)所必須的能力。隨著OpenHarm
    的頭像 發(fā)表于 04-27 13:44 ?1458次閱讀
    一文詳細(xì)了解<b class='flag-5'>ArkUI</b><b class='flag-5'>框架</b>新增<b class='flag-5'>能力</b>

    ArkUI開發(fā)框架動(dòng)畫能力

    動(dòng)畫加載準(zhǔn)備,在使用 Lottie 加載動(dòng)畫前需先通過插件 bodymovin 將 AE 生成的動(dòng)畫文件轉(zhuǎn)換為通用的 json 格式描述文件。開發(fā)
    的頭像 發(fā)表于 06-17 11:44 ?1502次閱讀

    Lottie移動(dòng)應(yīng)用動(dòng)畫效果框架

    ./oschina_soft/lottie-android.zip
    發(fā)表于 06-24 14:25 ?1次下載
    <b class='flag-5'>Lottie</b>移動(dòng)應(yīng)用<b class='flag-5'>動(dòng)畫</b>效果<b class='flag-5'>框架</b>

    ArkUI,更高效的框架設(shè)計(jì)

    上期文章我們講到了ArkUI的三大特性,同時(shí)提到了ArkUI是一套用于構(gòu)建HarmonyOS應(yīng)用界面的UI開發(fā)框架,本期我們將從架構(gòu)設(shè)計(jì)上來聊聊Ar
    的頭像 發(fā)表于 12-21 09:15 ?1591次閱讀

    ArkUI能力,助力應(yīng)用開發(fā)更便捷

    管理,以及實(shí)時(shí)界面預(yù)覽等相關(guān)能力,幫助您提升應(yīng)用開發(fā)效率,并能在多種設(shè)備上實(shí)現(xiàn)生動(dòng)而流暢的用戶體驗(yàn)。隨著HarmonyOS 3.1版本的發(fā)布,ArkUI也新增許多
    的頭像 發(fā)表于 02-15 16:35 ?860次閱讀

    鴻蒙ArkUI開發(fā)-Tabs組件的使用

    鴻蒙ArkUI開發(fā)-Tabs組件的使用
    的頭像 發(fā)表于 01-19 16:01 ?1907次閱讀
    鴻蒙<b class='flag-5'>ArkUI</b><b class='flag-5'>開發(fā)</b>-Tabs<b class='flag-5'>組件</b>的使用

    OpenHarmony實(shí)戰(zhàn)開發(fā)-如何實(shí)現(xiàn)組件動(dòng)畫。

    ArkUI組件提供了通用的屬性動(dòng)畫和轉(zhuǎn)場(chǎng)動(dòng)畫能力的同時(shí),還為一些組件提供了默認(rèn)的
    的頭像 發(fā)表于 04-28 15:49 ?630次閱讀
    OpenHarmony實(shí)戰(zhàn)<b class='flag-5'>開發(fā)</b>-如何實(shí)現(xiàn)<b class='flag-5'>組件</b><b class='flag-5'>動(dòng)畫</b>。