成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS三方件開發指南(15)-LoadingView功能介紹

開發 OpenHarmony
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[390520]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

1. LoadingView組件功能介紹

1.1. 功能介紹:

前言:

對于一些簡單的動畫我們開發者可以使用系統提供的一些方法來實現,但是在實際開發中設計師給出的動畫都是很炫酷復雜的,如果采用手寫代碼的方式,就要面對很多問題:

(1) 如不同平臺要重復開發,

(2) 開發者和動畫設計師之間的溝通問題,

(3) 復雜動畫對應的代碼也非常復雜,后期維護困難等。

Lottie功能介紹:

Lottie是Airbnb 專門為移動開發設計的一個第三方開源庫,他的優點如下:

(1) 跨平臺(目前支持Android、iOS 、Web、React Native等平臺),本組件完成了Lottie再HarmonyOS上的移植。

(2) 設計師通過After Effects將動畫導出JSON文件,然后由Lottie加載和渲染這個文件并轉成相應的代碼,由于是JSON文件,文件也會很小,可以減少App包的大小。

(3) 把動畫制作和APP開發的工作分開,由設計師來完成動畫的制作

1.2. 模擬器上運行效果:

[[390521]]

2. Lottie使用方法

2.1. 新建工程,增加組件Har包依賴

在應用模塊中添加HAR,只需要將lottie.har復制到entry\libs目錄下即可(由于build.gradle中已經依賴的libs目錄下的*.har,因此不需要在做修改)。

2.2. 增加動畫json文件

在resources/rawfile目錄下,放入動畫對應的json文件,如bullseye.json.

2.3. 修改主頁面的布局文件

修改主頁面的布局文件ability_main.xml,在Layout標簽中增加app命名空間。

然后添加一個com.airbnb.lottie.LottieView組件,設置LottieView_jsonFile屬性。

全部代碼如下:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  4.     xmlns:app="http://schemas.huawei.com/apk/res/ohos" 
  5.     ohos:height="match_parent" 
  6.     ohos:width="match_parent" 
  7.     ohos:orientation="vertical"
  8.  
  9.     <com.airbnb.lottie.LottieView 
  10.         ohos:id="$+id:lottieView" 
  11.         ohos:height="match_content" 
  12.         ohos:width="match_content" 
  13.         app:LottieView_jsonFile = "resources/rawfile/bullseye.json" 
  14.     /> 
  15. </DirectionalLayout> 

3. Lottie開發實現

3.1. 新建一個Module

新建一個Module,類型選擇HarmonyOS Library,模塊名為lottie,如圖:

3.2. 主要類介紹

3.3. JSON解析流程介紹

  1. // 解析json文件,獲取InputStream 
  2. ResourceManager resourceManager = getContext().getResourceManager(); 
  3. RawFileEntry rawFileEntry = resourceManager.getRawFileEntry(jsonFile); 
  4. resource = rawFileEntry.openRawFile(); 
  5.  
  6. // 解析json文件,返回lottieComposition 
  7. JsonReader reader = JsonReader.of(buffer(source(resource))); 
  8.  
  9. // 構造compositionLayer 
  10. compositionLayer = new CompositionLayer( 
  11.         null
  12.         LayerParser.parse(lottieComposition), 
  13.         lottieComposition.getLayers(), 
  14.         lottieComposition); 

其中json文件大致說明如下:

  1.  
  2. "w", // 0 寬度 
  3. "h", // 1 高度 
  4. "ip", // 2 其實幀 
  5. "op", // 3 結束幀 
  6. "fr", // 4 幀率 
  7. "v", // 5 版本號 
  8. "layers", // 6 圖層列表 
  9. "assets", // 7 圖片資源列表 
  10. "fonts", // 8 字體列表 
  11. "chars", // 9 字體具體樣式 
  12. "markers" // 10 遮蓋層列表 
  13.  

其中assets圖片資源說明如下:

  1. "assets": [ 
  2.  
  3.  
  4. "id", // 0 圖片id 
  5. "w", // 2 寬度 
  6. "h", // 3 高度 
  7. "p", // 4 圖片名稱 
  8. "u" // 5 圖片路徑 
  9.  
  10.  
  11.  
  12. layers說明如下: 
  13.  
  14. "layers": [ 
  15.  
  16.  
  17. "nm", // 0 名稱 
  18. "ind", // 1 索引 
  19. "refId", // 2 指向的資源id 
  20. "ty", // 3 圖層類型(0:復合型,1: Solid類型 2:圖片類型 4:Shape類型 5:Text類型) 
  21.  
  22. parent", // 4 父圖層 
  23. "sw", // 5 Solid寬度 
  24. "sh", // 6 Solid高度 
  25. "sc", // 7 Solid顏色 
  26. "ks", // 8 包含的動畫 
  27. "tt", // 9 遮蓋類型 
  28. "masksProperties", // 10 遮蓋列表 
  29. "shapes", // 11 圖層包含的形狀元素 
  30. "t", // 12 文本屬性 
  31. "ef", // 13 填充效果(Lottie doesn't support layer effects) 
  32. "sr", // 14 時間調整系數 
  33. "st", // 15 圖層起始幀 
  34. "w", // 16 圖層寬度 
  35. "h", // 17 圖層高度 
  36. "ip", // 18 圖層起始關鍵幀 
  37. "op", // 19 圖層結束關鍵幀 
  38.  
  39.  

layers中shapes解析如下:

  1. "shapes": [ 
  2.  
  3.  
  4. "ty", //類型(如gr:圖形組, fl:圖形填充, sh:圖形路徑) 
  5.  
  6. "nm",//名稱 
  7. "hd", // 是否隱藏 
  8. "it" // 圖形的軌跡集合 
  9.  
  10. [{ 
  11. "ind",//索引 
  12. "ks", //動畫關鍵幀 
  13.  
  14.  
  15. "t",  // startFrame 
  16. "s",  // startValue 
  17. "e",  // endValue 
  18. "o",  // 動畫起始點坐標 
  19. "i",  // 動畫結束點坐標  
  20. "h",  // 插值器類型 
  21. "to", // 7 路徑切線1坐標 
  22. "ti"  // 8 路徑切線2坐標 
  23.  
  24.  
  25. }] 
  26.  
  27.  

3.4. 播放流程介紹

Lottie源碼播放調用棧梳理如下:

  1. LottieDrawable.draw() 
  2.  
  3. drawInternal() 
  4.  
  5. drawWithOriginalAspectRatio() 
  6.  
  7. baseLayer.draw() 
  8.  
  9. compositionLayer.drawLayer() 
  10.  
  11. baseLayer.draw() 
  12.  
  13. compositionLayer.drawLayer() 
  14.  
  15. baseLayer.draw() 
  16.  
  17. ShapeLayer.drawLayer() 
  18.  
  19. ContentGroup.draw() 
  20.  
  21. FillContent.draw() or StrokeContent.draw()   

3.5. 主流程介紹

3.6. 編譯HAR包

利用Gradle可以將HarmonyOS Library庫模塊構建為HAR包,構建HAR包的方法如下:

在Gradle構建任務中,雙擊PackageDebugHar或PackageReleaseHar任務,構建Debug類型或Release類型的HAR。

待構建任務完成后,可以在工程目錄中的loadingview> bulid > outputs > har目錄中,獲取生成的HAR包。

4.項目源碼

見github代碼倉:https://github.com/isoftstone-dev/Lottie_HarmonyOS

更多原創,請關注"軟通動力HarmonyOS學院https://harmonyos.51cto.com/column/30

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-01-12 12:04:40

鴻蒙HarmonyOS應用開發

2021-03-19 17:42:01

鴻蒙HarmonyOS應用開發

2021-03-01 09:48:24

鴻蒙HarmonyOS應用開發

2021-02-24 15:22:47

鴻蒙HarmonyOS應用開發

2021-02-04 13:06:38

鴻蒙HarmonyOS應用開發

2021-01-13 09:40:31

鴻蒙HarmonyOS開發

2021-04-16 09:28:18

鴻蒙HarmonyOS應用

2021-06-28 14:48:03

鴻蒙HarmonyOS應用

2021-01-18 09:52:20

鴻蒙HarmonyOS開發

2021-02-26 14:15:27

鴻蒙HarmonyOS應用開發

2021-02-04 09:45:19

鴻蒙HarmonyOS應用開發

2021-01-21 13:21:18

鴻蒙HarmonyOSPhotoview組件

2021-01-20 09:54:56

鴻蒙HarmonyOS開發

2021-03-01 14:01:41

鴻蒙HarmonyOS應用開發

2021-05-12 15:17:39

鴻蒙HarmonyOS應用

2021-04-12 09:36:54

鴻蒙HarmonyOS應用

2021-01-22 17:33:03

鴻蒙HarmonyOS應用開發

2021-04-20 09:42:20

鴻蒙HarmonyOS應用開發

2023-02-07 15:43:13

三方庫適配鴻蒙

2011-08-02 17:58:09

iPhone開發 事件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美视频 | 日韩一区欧美一区 | 久久国产精品久久国产精品 | 欧美成人猛片aaaaaaa | 国产成人一区二区三区 | 欧美在线精品一区 | 国产精品久久久久久久久久免费 | 欧美日韩不卡 | 日韩www | 美国一级黄色片 | 国产精品久久久久久久久免费樱桃 | 国产精品久久久久久影院8一贰佰 | 91一区二区 | 午夜视频在线免费观看 | 久久久精品一区 | 国产精品久久亚洲 | 很黄很污的网站 | 久久性av | 久久久久久久久国产 | 免费精品久久久久久中文字幕 | 精品国产免费人成在线观看 | 日日网 | av一级一片 | 欧美国产日本一区 | 男人的天堂久久 | 欧美精品1区2区3区 精品国产欧美一区二区 | www.国产精品 | 久久久av | 精品毛片| 成人av一区二区三区 | 欧美一级片a| 密色视频 | www.操.com| 亚洲一区二区三区在线 | 久久999 | 午夜精品一区二区三区免费视频 | 久草综合在线 | 亚洲激情一区二区三区 | 亚洲一区免费在线 | 中文字幕一区二区三区四区五区 | 亚洲精品视频观看 |