★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤部落格園地址:為敢技術(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18508470
➤如果連結不是為敢技術的部落格園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點選原文地址閱讀!支援作者!支援原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
如何獲取三方庫
目前提供了兩種途徑獲取開源三方庫:
- 透過訪問Gitee網站開源社群獲取
在Gitee中,搜尋OpenHarmony-TPC倉庫,在tpc_resource中對三方庫進行了資源彙總,可以供開發者參考。
- 透過OpenHarmony三方庫中心倉獲取
進入OpenHarmony三方庫中心倉,根據型別或者直接搜尋尋找需要的三方庫。
常用三方庫介紹
常用的三方庫可以分為UI、動畫、網路、圖片、多媒體、資料儲存、安全、工具等。
- UI庫:
- @ohos/textlayoutbuilder:可以定製任一樣式的文字構建工具,包括字型間距、大小、顏色、富文字高亮顯示等。
- @ohos/roundedimageview:可以生成圓角矩形、或者橢圓形等圖片形狀。
- 網路庫:
- @ohos/axios:可以執行在node.js 和瀏覽器中,基於Axios 原庫v1.3.4版本進行適配,並沿用其現有用法和特性。
- 動畫庫:
- @ohos/lottie:可以解析Adobe After Effects軟體透過Bodymovin外掛匯出的json格式的動畫,並在移動裝置上進行本地渲染。
- @ohos/svg:可以解析SVG圖片並渲染到頁面上。
其他類別不單獨介紹,感興趣的可以前往Gitee或者三方庫中心倉瞭解更多。
三方庫在系統能力的基礎上,提供了更加方便的使用,在許多場景下,能夠極大提升開發者的開發效率,下面將以@ohos/lottie為例介紹三方庫的基本使用。
使用開源三方庫@ohos/lottie
本節介紹@ohos/lottie定義、安裝、解除安裝與使用。
什麼是@ohos/lottie
@ohos/lottie是基於lottie-web開發,整合在三方庫社群內的開源版本,是HarmonyOS系統中複雜動畫的一種解決方案。
動畫是傳達想法和創造更好的使用者互動體驗的工具,常見使用動畫的場景如下:
- 啟動動畫:APP logo動畫的播放。
- 載入動畫:網路請求的loading動畫。
- 上下拉重新整理動畫:請求更多資源時的重新整理動畫。
- 按鈕動畫:切換按鈕、編輯按鈕、播放按鈕等按鈕的切換過渡動畫。
- 檢視轉場動畫:一些場景的轉場新增動畫能夠提升使用者體驗。
@ohos/lottie提供了使用JSON動畫檔案的解決方案,開發者可以在原生應用中像使用靜態影像一樣使用動畫,而不用關注動畫的實現過程,並且@ohos/lottie具有一套完整的API控制動畫的行為,可以讓動畫更具有互動性。接下來將介紹@ohos/lottie的安裝和基本使用。
@ohos/lottie的安裝與解除安裝
- 安裝@ohos/lottie
透過ohpm執行對應的指令,將lottie安裝到專案中。
ohpm install @ohos/lottie
- 解除安裝@ohos/lottie
透過ohpm執行解除安裝指令,將lottie從專案中刪除,其程式包和配置資訊將會從專案中移除。
ohpm uninstall @ohos/lottie
使用@ohos/lottie
- @ohos/lottie的引入
透過import指令在專案中引入@ohos/lottie到檔案中。
import lottie from '@ohos/lottie'
- 構建Canvas畫布
@ohos/lottie解析JSON動畫檔案的資料需要基於Canvas 畫布進行2D渲染,所以在載入JSON動畫之前,要先初始化渲染上下文,並在畫面中建立Canvas畫布區域,將對應的渲染上下文renderingContext傳遞給Canvas。
// 初始化渲染上下文 private renderingSettings: RenderingContextSettings = new RenderingContextSettings(true) // 設定開啟抗鋸齒 private renderingContext: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.renderingSettings) // 建立2D渲染上下文 // 載入Canvas畫布 Canvas(this.renderingContext) ...
- 使用@ohos/lottie載入JSON動畫
載入JSON動畫需要用到loadAnimation方法,在方法中需配置相應的初始設定,包括渲染上下文、渲染方式以及JSON動畫資源的路徑等。可以直接使用lottie.loadAnimation方法,也可以用一個animationItem例項來接收返回的animationItem物件。
// 用animationItem例項接收 let animationItem = lottie.loadAnimation({ container: this.renderingContext, // 渲染上下文 renderer: 'canvas', // 渲染方式 loop: true, // 是否迴圈播放,預設true autoplay: true, // 是否自動播放,預設true path: 'common/lottie/data.json', // json路徑 }) lottie.loadAnimation({ // 或者直接使用 container: this.renderingContext, // 渲染上下文 renderer: 'canvas', // 渲染方式 loop: true, // 是否迴圈播放,預設true autoplay: true, // 是否自動播放,預設true path: 'common/lottie/data.json', // json路徑 })
- @ohos/lottie控制動畫
@ohos/lottie內封裝了包括狀態控制,進度控制,播放設定控制和屬性控制等多個API,使用者可以利用這些API完成對動畫的控制,實現更加靈活的互動效果。
// 播放、暫停、停止、銷燬 可以使用lottie,也可以使用animationItem例項進行控制 lottie.play(); // 從目前停止的幀開始播放 lottie.stop(); // 停止播放,回到第0幀 lottie.pause(); // 暫停該動畫,在當前幀停止並保持 lottie.togglePause(); // 切換暫停/播放狀態 lottie.destroy(); // 刪除該動畫,移除相應的元素標籤等。在unmount的時候,需要呼叫該方法 // 播放進度控制 animationItem.goToAndStop(value, isFrame); // 跳到某個時刻/幀並停止。isFrame(預設false)指示value表示幀還是時間(毫秒) animationItem.goToAndPlay(value, isFrame); // 跳到某個時刻/幀並進行播放 animationItem.goToAndStop(30, true); // 例:跳轉到第30幀並停止 animationItem.goToAndPlay(300); // 例:跳轉到第300毫秒並播放 // 控制幀播放 animationItem.setSegment(5,15); // 限定動畫資源播放時的整體幀範圍,即設定動畫片段 animationItem.resetSegments(5,15); // 重置播放的動畫片段 animationItem.playSegments(arr, forceFlag); // arr可以包含兩個數字或者兩個數字組成的陣列,forceFlag表示是否立即強制播放該片段 animationItem.playSegments([10,20], false); // 例:播放完之前的片段,播放10-20幀 animationItem.playSegments([[5,15],[20,30]], true); //例: 直接播放5-15幀和20-30幀 // 動畫基本屬性控制 lottie.setSpeed(speed); // 設定播放速度,speed為1表示正常速度 lottie.setDirection(direction); // 設定播放方向,1表示正向播放,-1表示反向播放 // 獲取動畫幀數屬性 animationItem.getDuration(); //獲取動畫時長
- 事件訂閱
在一些特殊場景下,比如開始載入動畫或者動畫播放結束時,可能需要執行相應的操作,在@ohos/lottie中提供了事件訂閱和取消訂閱的功能,當觸發對應的event,會執行傳入的回撥函式,使用者可以在回撥函式中完成要實現的功能。
// 訂閱事件 animationItem.addEventListener(event,function(){ // TODO something }) // 取消訂閱事件 animationItem.removeEventListener(event,function(){ // TODO something })
常見的event事件型別如下:
// event事件型別 'enterFrame' // 每進入一幀就會觸發 'loopComplete' // 當前迴圈下播放(迴圈播放/非迴圈播放)結束時觸發 'complete' // 播放完成時觸發 'segmentStart' // 播放指定片段時觸發,playSegments、resetSegments等方法剛開始播放指定片段時會發出,如果playSegments播放多個片段,多個片段最開始都會觸發。 'destroy' // 銷燬動畫時觸發 'data_ready' // 資料準備完成 'DOMLoaded' // 動畫相關dom已經被新增 'error' // 出現錯誤 'data_failed' // 資料載入失敗 ...
- 三方庫資源彙總:https://gitee.com/openharmony-tpc/tpc_resource
- OpenHarmony三方庫中心倉:https://ohpm.openharmony.cn
- @ohos/lottie的使用:https://gitee.com/openharmony-tpc/lottieETS