0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

[OpenHarmony北向应用开发] 做一个 loading加载动画

OpenHarmony开发经验 来源: OpenHarmony开发经验 作者: OpenHarmony开发经验 2023-04-20 11:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

  • 本篇文章介绍了如何实现一个简单的loading加载动画,并且在提供了一个demo工程供读者下载学习。

    • loading加载动画demo下载地址: https://gitee.com/from-north-to-north/open-armony-north/tree/master/loading_animation
  • 作为一个OpenHarmony南向开发者,接触北向应用开发并不多。北向开发ArkUI老是改来改去,对笔者这样的入门选手来说学习成本其实非常大,希望后面可以慢慢稳定下来吧。最近努力学习了一些,下面将学习经验分享如下:

  • 通过本文您将了解:

    1、使用ImageAnimator帧动画组件实现一个自定义loading加载动画。

    2、使用 Progress 进度条组件实现 loading加载动画。


笔者开发环境:(demo ArkUI应用源码,一定得是以下IDE和SDK版本或者更高版本才能编译运行,这也是坑点之一!!!)

  • 开发板:润和软件DAYU200开发板
  • OpenHarmony版本:OpenHarmony3.2 Beta5
  • IDE:DevEco Studio 3.1.0.200
  • SDK:API9(3.2.10.6)

效果演示

动画2.gif

1. 涉及到的知识点 (先大概了解一下,知道要用到这些东西就行)

  • 创建自定义组件

    https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-create-custom-components.md

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-page-custom-components-lifecycle.md

  • ImageAnimator帧动画组件

    https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md

  • Progress进度条组件

    https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-progress.md

  • CustomDialogController自定义弹窗组件

    https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md

  • 定时器API

    https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-timer.md

  • Row组件

    沿水平方向布局容器。https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-container-row.md

  • OpenHarmony组件导读

    https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-components-summary.md

2、使用ImageAnimator帧动画组件自定义loading动画开发步骤:

├── ets
│   ├── loading      # loading动画图片帧
│   └── pages        # ets代码
│       ├── Index.ets
│       ├── loadingComponent_part1.ets
│       ├── loadingComponent_part2.ets #ImageAnimator帧动画组件实现自定义loading加载动画
│       └── loadingComponent_part3.ets #Progress进度条组件实现的loading加载动画

2.1 将自定义的loading动画的图片帧放在ets目录下

  • 组成自定义的loading动画的图片帧,详情请见文末提供的demo工程

    image.png

  • 在entry\\src\\main\\ets新建一个loading目录,将其放在该目录下

    image.png

2.2 用帧动画组件将动画封装成一个自定义组件

//loadingComponent_part1.ets
 @Component

export default struct loadingComponent_part1 {
  private imageWidth: number | Resource = 0
  private imageHeight: number | Resource = 0

  build() {
    Column() {
      ImageAnimator()
        .images([
          {
            src: '/loading/loading01.png',
            duration: 200, //每一帧图片的播放时长,单位毫秒
          },
          {
            src: '/loading/loading02.png',
            duration: 200,
          },
          {
            src: '/loading/loading03.png',
            duration: 200,
          },
          {
            src: '/loading/loading04.png',
            duration: 200,
          },
          {
            src: '/loading/loading05.png',
            duration: 200,
          },
          {
            src: '/loading/loading06.png',
            duration: 200,
          }])
        .width(this.imageWidth)
        .height(this.imageHeight)
        .iterations(-1)  
          //	设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。
        
        .fixedSize(true) 
          //设置图片大小是否固定为组件大小。 true表示图片大小与组件大小一致,此时设置图片的widthheighttopleft属性是无效的。false表示每一张图片的widthheighttopleft属性都要单独设置。
        
        .reverse(true) 
          //设置播放顺序。false表示从第1张图片播放到最后1张图片; true表示从最后1张图片播放到第1张图片。
        
        .fillMode(FillMode.None)
          //设置动画开始前和结束后的状态,可选值参见FillMode说明
        
        .state(AnimationStatus.Running)  
          //Running表示动画处于播放状态
    }
  }
}

2.3 在主页面实现自定义的loading动画(完整代码见文末demo工程)

  • 首先导入自定义的loading动画
import loading1 from './loadingComponent_part1';
struct Index {
  //用来绘制loading动画的
  // 要打开在点击事件中添加 this.loading1.open();
  // 要关闭在点击事件中添加 this.loading1.close();
  // 通过CustomDialogController类显示自定义弹窗。
  private loading1: CustomDialogController = new CustomDialogController({
    builder: loadingProgress_part1(),
    alignment: DialogAlignment.Center,
    offset: ({ dx: 0, dy: 0 }),
    autoCancel: false,
    customStyle: true
  });
}

//用来绘制loading动画的
@CustomDialog
struct loadingProgress_part1{
  controller: CustomDialogController;

  build() {
    Column() {
      loading1({ imageWidth: 80,
        imageHeight: 80 }).margin({top:350})

    }
    .width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .backgroundColor(Color.White)
  }

}
  • 使用定时器API控制loading动画
Button(this.message1)
          .margin({top:100})
          .fontWeight(FontWeight.Normal)
          .backgroundColor(Color.Green) //设置按钮颜色
          .onClick(() => {

            //开始绘制loading动画
            this.loading1.open();
            //使用一个setTimeout定时器,setTimeout中第一个参数使用 () => { 要执行的函数 }
            //this.ocrDialog.close();是关闭loading动画
            setTimeout( () => {this.loading1.close();} , 3000);

          })
  • 实现效果

    动画2.gif

3、使用 Progress 进度条组件实现 loading加载动画开发步骤:

Progress进度条组件

(完整代码见文末demo工程)

struct Index {
  @State i: number = 0

  //aboutToAppear	函数在创建自定义组件的新实例后,在执行其build函数之前执行。
  aboutToAppear(){
    //定时器中的setInterval: 重复调用一个函数,在每次调用之间具有固定的时间延迟。
    setInterval( () => {  this.i = this.i + 10  } , 300);
  }

  build() {
...

        Progress({ value: this.i, type: ProgressType.Linear })
          .width(200)
          .margin({top:30})

        Progress({ value: this.i, total: 150, type: ProgressType.ScaleRing })
          .color(Color.Green).value(this.i).width(50)
          .margin({top:30})
          .style({ strokeWidth: 15, scaleCount: 15, scaleWidth: 5 })
...
}

}
  • 实现效果

    动画2.gif

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    6122

    浏览量

    113285
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20716
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【M-K1HSE开发板免费体验】相关源码之阅读和分析1-使用XComponent + Vsync 实现自定义动画

    :收到 Vsync 信号后提交新帧到屏幕,保证流畅性。 主线程无关:即使主线程因复杂布局或逻辑阻塞,动画仍能持续流畅运行。 先看看这个项目: 这是这个项目的结构,文件。这是非常典型的华为鸿蒙
    发表于 09-03 16:05

    向应变计组是如何工作的,较单向应变计有何优势

    在水利工程、大坝、桥梁等大型混凝土结构的安全监测中,全面了解结构物内部真实的应力应变状态至关重要。传统的单向应变计只能测量单方向上的变形,而南京峟思工程仪器有限公司的VWS-S型振弦式多向应变计组
    的头像 发表于 07-18 13:32 976次阅读
    多<b class='flag-5'>向应</b>变计组是如何工作的,较单<b class='flag-5'>向应</b>变计有何优势

    【汇思博SEEK100开发板试用体验】01 SEEK100开发板开箱&amp;简介

    和低功耗的应用,可支持OpenHarmony标准系统。开发板支持蓝牙、Wi-Fi、音频、视频、摄像头等功能,可满足广泛的向应开发,也拥有
    发表于 07-03 22:28

    邀请函|2025校源行“师资培训”(南京站)暨江苏省开源鸿蒙向应开发技术师资培训

    信息系统股份有限公司,兹定于7月6-11日,在南京举办“2025开放原子校源行活动(南京站)暨江苏省开源鸿蒙向应开发技术师资培训”。我们诚挚邀请您拨冗参与,共同探索
    的头像 发表于 06-12 17:29 713次阅读
    邀请函|2025校源行“师资培训”(南京站)暨江苏省开源鸿蒙<b class='flag-5'>北</b><b class='flag-5'>向应</b>用<b class='flag-5'>开发</b>技术师资培训

    鸿蒙5开发宝藏案例分享---体验流畅的首页信息流

    ?** 鸿蒙新闻类首页开发全攻略:流畅动效+懒加载实战** Hey 各位鸿蒙开发者! 今天要分享超实用的鸿蒙新闻类首页
    发表于 06-12 11:42

    请问下,openharmony支持哪款龙芯的开发板?有没有开源的龙芯的openharmony源码?

    想买个2k0300的开发板学习龙芯和openharmony,愣是没有看到提供openharmony源码的,也没与看到开源的代码。gitee上,openharmony的龙芯sig仓库也是
    发表于 04-26 13:06

    如何成为名合格的KaihongOS向应开发工程师

    如何成为名合格的向应开发工程师 在快速发展的软件开发领域,
    发表于 04-23 06:46

    DialogHub上线OpenHarmony开源社区,高效开发鸿蒙应用弹窗

    。 “DialogHub”的推出为开发者提供了开箱即用的弹窗管理解决方案,帮助开发者更高效地实现各种场景下的弹窗功能,显著降低学习成本与开发
    发表于 04-03 17:30

    鸿蒙开发OpenHarmony5.0 DevEco Studio开发工具安装与配置

    本文介绍OpenHarmony5.0 DevEco Studio开发工具安装与配置,鸿蒙开发入门必备!由触觉智能Purple Pi OH鸿蒙开发
    的头像 发表于 03-28 18:05 1335次阅读
    鸿蒙<b class='flag-5'>北</b>向<b class='flag-5'>开发</b><b class='flag-5'>OpenHarmony</b>5.0 DevEco Studio<b class='flag-5'>开发</b>工具安装与配置

    《手把手教你做PC-KaihongOS笔记本电脑开发实战》课件汇总

    为帮助开发者快速上手并系统掌握『KaihongOS向应开发技术』和『KaihongOS南向设备驱动开发技术』,助力
    发表于 03-18 10:25

    OpenHarmony在应用与游戏开发领域的前沿成果

    日前,由开放原子开源基金会主办的第二届OpenHarmony创新应用挑战赛决赛路演在北京圆满结束,作为第二届开放原子大赛的重要赛项之,本届赛事汇聚全球418支团队,产出超过110创新作品,集中
    的头像 发表于 03-03 15:04 890次阅读

    鸿蒙开发OpenHarmony4.1 DevEco Studio开发工具安装与配置

    OpenHarmony4.1 DevEco Studio开发工具安装与配置,鸿蒙开发入门必备!
    的头像 发表于 02-07 17:35 1338次阅读
    鸿蒙<b class='flag-5'>北</b>向<b class='flag-5'>开发</b><b class='flag-5'>OpenHarmony</b>4.1 DevEco Studio<b class='flag-5'>开发</b>工具安装与配置

    如何成为名合格的向应开发工程师

    在快速发展的软件开发领域,向应开发工程师是专注于系统级应用
    发表于 01-10 10:00

    用小安派 DSL做一个天气站

    2.4 寸 320 *240 分辨率屏幕,外接 sht30 温湿度传感器,做一个天气站。 01、主要功能 时间显示(已完成) 天气显示(已完成) 温湿度显示(已完成) wifi 密码保
    的头像 发表于 01-06 16:44 858次阅读
    用小安派 DSL<b class='flag-5'>做一个</b>天气站

    鸿蒙原生页面高性能解决方案上线OpenHarmony社区 助力打造高性能原生应用

    随着HarmonyOS NEXT的正式推出,鸿蒙原生应用开发热度高涨,数量激增。但在三方应用鸿蒙化进程中,性能问题频出。为此,HarmonyOS NEXT推出了整套原生页面高性能解决方案,包括
    发表于 01-02 18:00