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

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

创新互联专注于企业网络营销推广、网站重做改版、桃江网站定制设计、自适应品牌网站建设、H5技术成都商城网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为桃江等各大城市提供网站开发制作服务。

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

https://harmonyos./#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.  
  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函数中,增加如下代码。

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

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

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

https://harmonyos./#zz

网站名称:鸿蒙HarmonyOS三方件开发指南(2)-LoadingView组件
当前地址:http://www.shufengxianlan.com/qtweb/news3/511753.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联