自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙HarmonyOS三方件開發(fā)指南(2)-LoadingView組件

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

[[375337]]

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

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

https://harmonyos.51cto.com/#zz

1. LoadingView組件功能介紹

1.1. 功能介紹:

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

1.2. 模擬器上運行效果


2. LoadingView使用方法

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

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

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

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

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

 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ù),代碼如下:

  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ù)SetType,代碼如下

  1. public enum LoadingViewType { 
  2.  
  3.     // 支持的類型 
  4.  
  5.     WATER, BALLOON, FISH, CIRCLE; 
  6.  
  7.   
  8. // 設置動畫的類型 
  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.     // 設置進度 
  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庫模塊構建為HAR包,構建HAR包的方法如下:

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

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

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

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

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

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

https://harmonyos.51cto.com/#zz

 

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

2021-03-31 09:50:25

鴻蒙HarmonyOS應用開發(fā)

2021-06-28 14:48:03

鴻蒙HarmonyOS應用

2021-01-18 09:52:20

鴻蒙HarmonyOS開發(fā)

2021-02-04 09:45:19

鴻蒙HarmonyOS應用開發(fā)

2021-02-24 15:22:47

鴻蒙HarmonyOS應用開發(fā)

2021-03-01 09:48:24

鴻蒙HarmonyOS應用開發(fā)

2021-01-13 09:40:31

鴻蒙HarmonyOS開發(fā)

2021-04-16 09:28:18

鴻蒙HarmonyOS應用

2021-02-04 13:06:38

鴻蒙HarmonyOS應用開發(fā)

2021-01-21 13:21:18

鴻蒙HarmonyOSPhotoview組件

2021-01-20 09:54:56

鴻蒙HarmonyOS開發(fā)

2021-05-12 15:17:39

鴻蒙HarmonyOS應用

2021-02-26 14:15:27

鴻蒙HarmonyOS應用開發(fā)

2021-01-22 17:33:03

鴻蒙HarmonyOS應用開發(fā)

2021-03-19 17:42:01

鴻蒙HarmonyOS應用開發(fā)

2021-04-20 09:42:20

鴻蒙HarmonyOS應用開發(fā)

2021-03-01 14:01:41

鴻蒙HarmonyOS應用開發(fā)

2021-04-12 09:36:54

鴻蒙HarmonyOS應用

2021-03-10 15:03:40

鴻蒙HarmonyOS應用

2021-08-04 14:16:41

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號