鸿蒙HarmonyOS三方件开发指南(2)-LoadingView组件

开发 OpenHarmony
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz

[[375337]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

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函数中,增加如下代码。

  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开发实现

3.1. 新建一个Module

新建一个Module,类型选择HarmonyOS Library,模块名为loadingview,如图


3.2. 新建一个LoadingView类

新建一个LoadingView类,继承自Component类,实现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.  

 为了实现动画,需要定义一个AnimatorValue,并设置动画侦听回调函数,代码如下:

  1. // 动画 
  2.  
  3. private AnimatorValue animatorValue; 
  4.   
  5.  
  6. // 动画侦听函数 
  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.   

 增加一个设置类型的函数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函数)。

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技术社区共同所有,如需转载,请注明出处,否则将追究法律责任

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

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

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-03-31 09:50:25

鸿蒙HarmonyOS应用开发

2021-06-28 14:48:03

鸿蒙HarmonyOS应用

2021-02-04 09:45:19

鸿蒙HarmonyOS应用开发

2021-01-18 09:52:20

鸿蒙HarmonyOS开发

2021-01-21 13:21:18

鸿蒙HarmonyOSPhotoview组件

2021-01-20 09:54:56

鸿蒙HarmonyOS开发

2021-03-01 09:48:24

鸿蒙HarmonyOS应用开发

2021-02-24 15:22:47

鸿蒙HarmonyOS应用开发

2021-01-13 09:40:31

鸿蒙HarmonyOS开发

2021-04-16 09:28:18

鸿蒙HarmonyOS应用

2021-02-04 13:06:38

鸿蒙HarmonyOS应用开发

2021-01-22 17:33:03

鸿蒙HarmonyOS应用开发

2021-02-26 14:15:27

鸿蒙HarmonyOS应用开发

2021-05-12 15:17:39

鸿蒙HarmonyOS应用

2021-03-01 14:01:41

鸿蒙HarmonyOS应用开发

2021-03-19 17:42:01

鸿蒙HarmonyOS应用开发

2021-04-20 09:42:20

鸿蒙HarmonyOS应用开发

2021-04-12 09:36:54

鸿蒙HarmonyOS应用

2021-03-10 15:03:40

鸿蒙HarmonyOS应用

2021-08-02 14:54:50

鸿蒙HarmonyOS应用
点赞
收藏

51CTO技术栈公众号