日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
HarmonyOS三方件開(kāi)發(fā)指南(15)-LoadingView功能介紹

[[390520]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.

1. LoadingView組件功能介紹

1.1. 功能介紹:

前言:

對(duì)于一些簡(jiǎn)單的動(dòng)畫我們開(kāi)發(fā)者可以使用系統(tǒng)提供的一些方法來(lái)實(shí)現(xiàn),但是在實(shí)際開(kāi)發(fā)中設(shè)計(jì)師給出的動(dòng)畫都是很炫酷復(fù)雜的,如果采用手寫代碼的方式,就要面對(duì)很多問(wèn)題:

(1) 如不同平臺(tái)要重復(fù)開(kāi)發(fā),

(2) 開(kāi)發(fā)者和動(dòng)畫設(shè)計(jì)師之間的溝通問(wèn)題,

(3) 復(fù)雜動(dòng)畫對(duì)應(yīng)的代碼也非常復(fù)雜,后期維護(hù)困難等。

Lottie功能介紹:

Lottie是Airbnb 專門為移動(dòng)開(kāi)發(fā)設(shè)計(jì)的一個(gè)第三方開(kāi)源庫(kù),他的優(yōu)點(diǎn)如下:

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

(2) 設(shè)計(jì)師通過(guò)After Effects將動(dòng)畫導(dǎo)出JSON文件,然后由Lottie加載和渲染這個(gè)文件并轉(zhuǎn)成相應(yīng)的代碼,由于是JSON文件,文件也會(huì)很小,可以減少App包的大小。

(3) 把動(dòng)畫制作和APP開(kāi)發(fā)的工作分開(kāi),由設(shè)計(jì)師來(lái)完成動(dòng)畫的制作

1.2. 模擬器上運(yùn)行效果:

[[390521]]

2. Lottie使用方法

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

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

2.2. 增加動(dòng)畫json文件

在resources/rawfile目錄下,放入動(dòng)畫對(duì)應(yīng)的json文件,如bullseye.json.

2.3. 修改主頁(yè)面的布局文件

修改主頁(yè)面的布局文件ability_main.xml,在Layout標(biāo)簽中增加app命名空間。

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

全部代碼如下:

 
 
 
 
  1.  
  2.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.     xmlns:app="http://schemas.huawei.com/apk/res/ohos" 
  4.     ohos:height="match_parent" 
  5.     ohos:width="match_parent" 
  6.     ohos:orientation="vertical"> 
  7.  
  8.     
  9.         ohos:id="$+id:lottieView" 
  10.         ohos:height="match_content" 
  11.         ohos:width="match_content" 
  12.         app:LottieView_jsonFile = "resources/rawfile/bullseye.json" 
  13.     /> 
  14.  

3. Lottie開(kāi)發(fā)實(shí)現(xiàn)

3.1. 新建一個(gè)Module

新建一個(gè)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. // 構(gòu)造compositionLayer 
  10. compositionLayer = new CompositionLayer( 
  11.         null, 
  12.         LayerParser.parse(lottieComposition), 
  13.         lottieComposition.getLayers(), 
  14.         lottieComposition); 

其中json文件大致說(shuō)明如下:

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

其中assets圖片資源說(shuō)明如下:

 
 
 
 
  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說(shuō)明如下: 
  13.  
  14. "layers": [ 
  15.  
  16.  
  17. "nm", // 0 名稱 
  18. "ind", // 1 索引 
  19. "refId", // 2 指向的資源id 
  20. "ty", // 3 圖層類型(0:復(fù)合型,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 包含的動(dòng)畫 
  27. "tt", // 9 遮蓋類型 
  28. "masksProperties", // 10 遮蓋列表 
  29. "shapes", // 11 圖層包含的形狀元素 
  30. "t", // 12 文本屬性 
  31. "ef", // 13 填充效果(Lottie doesn't support layer effects) 
  32. "sr", // 14 時(shí)間調(diào)整系數(shù) 
  33. "st", // 15 圖層起始幀 
  34. "w", // 16 圖層寬度 
  35. "h", // 17 圖層高度 
  36. "ip", // 18 圖層起始關(guān)鍵幀 
  37. "op", // 19 圖層結(jié)束關(guān)鍵幀 
  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", //動(dòng)畫關(guān)鍵幀 
  13.  
  14.  
  15. "t",  // startFrame 
  16. "s",  // startValue 
  17. "e",  // endValue 
  18. "o",  // 動(dòng)畫起始點(diǎn)坐標(biāo) 
  19. "i",  // 動(dòng)畫結(jié)束點(diǎn)坐標(biāo)  
  20. "h",  // 插值器類型 
  21. "to", // 7 路徑切線1坐標(biāo) 
  22. "ti"  // 8 路徑切線2坐標(biāo) 
  23.  
  24.  
  25. }] 
  26.  
  27.  

3.4. 播放流程介紹

Lottie源碼播放調(diào)用棧梳理如下:

 
 
 
 
  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庫(kù)模塊構(gòu)建為HAR包,構(gòu)建HAR包的方法如下:

在Gradle構(gòu)建任務(wù)中,雙擊PackageDebugHar或PackageReleaseHar任務(wù),構(gòu)建Debug類型或Release類型的HAR。

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

4.項(xiàng)目源碼

見(jiàn)github代碼倉(cāng):https://github.com/isoftstone-dev/Lottie_HarmonyOS

更多原創(chuàng),請(qǐng)關(guān)注"軟通動(dòng)力HarmonyOS學(xué)院https://harmonyos./column/30

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.

 


網(wǎng)站標(biāo)題:HarmonyOS三方件開(kāi)發(fā)指南(15)-LoadingView功能介紹
本文路徑:http://www.5511xx.com/article/cdidjji.html