日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
鴻蒙HarmonyOS三方件開發(fā)指南(2)-LoadingView組件

想了解更多內(nèi)容,請訪問:

創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、桃江網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、成都商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為桃江等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

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

https://harmonyos./#zz

1. LoadingView組件功能介紹

1.1. 功能介紹:

LoadingView組件是一個可以顯示加載動畫的三方組件,目前支持4種風格顯示。

1.2. 模擬器上運行效果:

2. LoadingView使用方法

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

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

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

修改主頁面的布局文件ability_main.xml,將跟組件容器修改為com.isoftstone.precentpositionlayout.PrecentPositionLayout,然后再增加4個com.isoftstone.loadingview.LoadingView組件,分別位于屏幕的左上,左下,右上,右下,每個組件的長度和寬度都占屏幕的50%。修改后代碼如下:

 
 
 
 
  1.  
  2.  
  3.  
  4.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  5.  
  6.     ohos:height="match_parent" 
  7.  
  8.     ohos:width="match_parent" 
  9.  
  10.     ohos:orientation="vertical" 
  11.  
  12.     ohos:id = "$+id:layout_main"> 
  13.  
  14.   
  15.  
  16.     
  17.  
  18.         ohos:id="$+id:text_helloworld" 
  19.  
  20.         ohos:height="500" 
  21.  
  22.         ohos:width="500" 
  23.  
  24.         ohos:left_margin="0" 
  25.  
  26.         ohos:top_margin="0" 
  27.  
  28.     /> 
  29.  
  30.   
  31.  
  32.     
  33.  
  34.         ohos:id="$+id:text_helloworld2" 
  35.  
  36.         ohos:height="500" 
  37.  
  38.         ohos:width="500" 
  39.  
  40.         ohos:left_margin="500" 
  41.  
  42.         ohos:top_margin="0" 
  43.  
  44.         /> 
  45.  
  46.   
  47.  
  48.     
  49.  
  50.         ohos:id="$+id:text_helloworld3" 
  51.  
  52.         ohos:height="500" 
  53.  
  54.         ohos:width="500" 
  55.  
  56.         ohos:left_margin="0" 
  57.  
  58.         ohos:top_margin="500" 
  59.  
  60.         /> 
  61.  
  62.   
  63.  
  64.     
  65.  
  66.         ohos:id="$+id:text_helloworld4" 
  67.  
  68.         ohos:height="500" 
  69.  
  70.         ohos:width="500" 
  71.  
  72.         ohos:left_margin="500" 
  73.  
  74.         ohos:top_margin="500" 
  75.  
  76.         /> 
  77.  
  78.   
  79.  
  80.  

 2.3. 修改MainAbilitySlince的UI加載代碼

在MainAbilitySlince類的onStart函數(shù)中,增加如下代碼。

 
 
 
 
  1. @Override 
  2.  
  3. public void onStart(Intent intent) { 
  4.  
  5.     super.onStart(intent); 
  6.  
  7.     super.setUIContent(ResourceTable.Layout_ability_main); 
  8.  
  9.   
  10.  
  11.     PrecentPositionLayout precentPositionLayout = (PrecentPositionLayout)findComponentById(ResourceTable.Id_layout_main); 
  12.  
  13.     precentPositionLayout.AutoSize(); 
  14.  
  15.   
  16.  
  17.     LoadingView loadingView1 = (LoadingView)findComponentById(ResourceTable.Id_text_helloworld); 
  18.  
  19.     loadingView1.SetType(LoadingView.LoadingViewType.WATER); 
  20.  
  21.     loadingView1.addDrawTask(loadingView1); 
  22.  
  23.   
  24.  
  25.     LoadingView loadingView2 = (LoadingView)findComponentById(ResourceTable.Id_text_helloworld2); 
  26.  
  27.     loadingView2.SetType(LoadingView.LoadingViewType.BALLOON); 
  28.  
  29.     loadingView2.addDrawTask(loadingView2); 
  30.  
  31.   
  32.  
  33.     LoadingView loadingView3 = (LoadingView)findComponentById(ResourceTable.Id_text_helloworld3); 
  34.  
  35.     loadingView3.SetType(LoadingView.LoadingViewType.FISH); 
  36.  
  37.     loadingView3.addDrawTask(loadingView3); 
  38.  
  39.   
  40.  
  41.     LoadingView loadingView4 = (LoadingView)findComponentById(ResourceTable.Id_text_helloworld4); 
  42.  
  43.     loadingView4.SetType(LoadingView.LoadingViewType.CIRCLE); 
  44.  
  45.     loadingView4.addDrawTask(loadingView4); 
  46.  
  47.   
  48.  

 3. LoadingView開發(fā)實現(xiàn)

3.1. 新建一個Module

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

3.2. 新建一個LoadingView類

新建一個LoadingView類,繼承自Component類,實現(xiàn)Component.DrawTast接口,并重寫onDraw方法,代碼如下:

 
 
 
 
  1. // 繪制類 
  2.  
  3. private LoadingRander loadingRander; 
  4.   
  5. @Override 
  6.  
  7. public void onDraw(Component component, Canvas canvas) { 
  8.  
  9.     // 獲取組件的大小,進行繪制 
  10.  
  11.     DimensFloat pt = getComponentSize(); 
  12.  
  13.     Rect rect = new Rect(0,0,pt.getSizeXToInt(),pt.getSizeYToInt()); 
  14.  
  15.     loadingRander.draw(canvas, rect); 
  16.  

 為了實現(xiàn)動畫,需要定義一個AnimatorValue,并設(shè)置動畫偵聽回調(diào)函數(shù),代碼如下:

 
 
 
 
  1. // 動畫 
  2.  
  3. private AnimatorValue animatorValue; 
  4.   
  5.  
  6. // 動畫偵聽函數(shù) 
  7.  
  8. private final AnimatorValue.ValueUpdateListener mAnimatorUpdateListener 
  9.  
  10.         = new AnimatorValue.ValueUpdateListener() { 
  11.  
  12.     @Override 
  13.  
  14.     public void onUpdate(AnimatorValue animatorValue, float v) { 
  15.  
  16.         if (loadingRander != null) { 
  17.  
  18.             loadingRander.setProgess(v); 
  19.  
  20.         } 
  21.  
  22.         invalidate(); 
  23.  
  24.     } 
  25.  
  26. }; 
  27.  
  28.   
  29.  
  30. private void init()  { 
  31.  
  32.     // 啟動動畫 
  33.     animatorValue = new AnimatorValue(); 
  34.  
  35.     animatorValue.setCurveType(Animator.CurveType.LINEAR); 
  36.  
  37.     animatorValue.setDelay(100); 
  38.  
  39.     animatorValue.setLoopedCount(Animator.INFINITE); 
  40.  
  41.     animatorValue.setDuration(2000); 
  42.  
  43.     animatorValue.setValueUpdateListener(mAnimatorUpdateListener); 
  44.  
  45.     animatorValue.start(); 
  46.  
  47.   

 增加一個設(shè)置類型的函數(shù)SetType,代碼如下

 
 
 
 
  1. public enum LoadingViewType { 
  2.  
  3.     // 支持的類型 
  4.  
  5.     WATER, BALLOON, FISH, CIRCLE; 
  6.  
  7.   
  8. // 設(shè)置動畫的類型 
  9.  
  10. public boolean SetType(LoadingViewType type) { 
  11.  
  12.     switch (type) { 
  13.  
  14.         case WATER: 
  15.  
  16.             loadingRander  = new LoadingRanderWatter(); 
  17.  
  18.             break; 
  19.  
  20.         case BALLOON: 
  21.  
  22.             loadingRander  = new LoadingRanderBalloon(); 
  23.  
  24.             break; 
  25.  
  26.         case FISH: 
  27.  
  28.             loadingRander  = new LoadingRanderFish(); 
  29.  
  30.             break; 
  31.  
  32.         case CIRCLE: 
  33.  
  34.             loadingRander  = new LoadingRanderCircle(); 
  35.  
  36.             break; 
  37.  
  38.         default: 
  39.  
  40.             return false; 
  41.  
  42.     } 
  43.  
  44.     return true; 
  45.  

 3.3. 新建一個LoadingRander類

LoadingRander是動畫繪制的基類,它有兩個對外接口,代碼如下。

 
 
 
 
  1. public class LoadingRander { 
  2.  
  3.     protected float mProgress; 
  4.  
  5.     protected float mWidth; 
  6.  
  7.     protected float mHeight; 
  8.  
  9.     protected float mTextSize; 
  10.  
  11.   
  12.  
  13.     public LoadingRander() { 
  14.  
  15.     } 
  16.  
  17.     // 設(shè)置進度 
  18.  
  19.     public void setProgess(float progress) { 
  20.  
  21.         mProgress = progress; 
  22.  
  23.     } 
  24.  
  25.     // 繪制 
  26.  
  27.     protected void draw(Canvas canvas, Rect bounds) { 
  28.  
  29.         return; 
  30.  
  31.     } 
  32.  
  33.   

 3.4. 新建四個LoadingRander的子類

分別完成四種風格動畫的繪制(重寫基類的draw函數(shù))。

3.5. 編譯HAR包

利用Gradle可以將HarmonyOS Library庫模塊構(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包。

項目源代碼地址:https://github.com/isoftstone-dev/LoadingView_HarmonyOS

?著作權(quán)歸作者和HarmonyOS技術(shù)社區(qū)共同所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責任

想了解更多內(nèi)容,請訪問:

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

https://harmonyos./#zz


本文標題:鴻蒙HarmonyOS三方件開發(fā)指南(2)-LoadingView組件
鏈接地址:http://www.dlmjj.cn/article/dhpgojc.html