色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    5074

    瀏覽量

    97661
  • OpenHarmony
    +關注

    關注

    25

    文章

    3727

    瀏覽量

    16382
收藏 人收藏

    評論

    相關推薦

    在徐州工業職業技術學院,透見數智淮海的南秀

    貫通南向的基礎設施升級與向應用落地,是數智徐州的獨特風景
    的頭像 發表于 11-06 19:20 ?2724次閱讀
    在徐州工業職業技術學院,透見數智淮海的南秀<b class='flag-5'>北</b>雄

    基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發。本案例已在OpenHarmony凌蒙派-RK35
    的頭像 發表于 09-15 08:09 ?412次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用<b class='flag-5'>開發</b>:Hello<b class='flag-5'>Openharmony</b>

    【迅為RK3568開發板】OpenHarmony學習開發系列教程(第1期 向基礎篇

    P5P4_OpenHarmony支持設備類型3:47 P6p5_南向開發開發的區別1:49 P7P6_OpenHarmony應用
    發表于 08-16 15:27

    鴻蒙OpenHarmony南向/向快速開發教程-迅為RK3568開發

    4.1學習之旅了嗎?快來加入我們,起探索鴻蒙4.1系統的無限魅力吧! 【北京迅為】OpenHarmony學習開發系列教程(第1期 向基礎篇
    發表于 07-23 10:44

    10萬獎金池!CCF開源創新大賽-OpenHarmony應用開發大賽,等你來戰!

    生態建設的高質量發展。深開鴻發布“OpenHarmony應用開發-開源項目貢獻賽”賽道,旨在通過開發開源鴻蒙向應用、擴展開源鴻蒙
    的頭像 發表于 07-17 08:33 ?710次閱讀
    10萬獎金池!CCF開源創新大賽-<b class='flag-5'>OpenHarmony</b>應用<b class='flag-5'>開發</b>大賽,等你來戰!

    OpenHarmony之開機優化

    OpenHarmony已經支持了Bootchart工具,我們可以直接使用Bootchart工具,Bootchart工具介紹如下: 概述 Bootchart是用于系統啟動過程性能分析的開源軟件工具
    發表于 07-01 16:39

    HarmonyOS開發案例:【購物車app】

    OpenHarmony ArkUI框架提供了豐富的動畫組件和接口,開發者可以根據實際場景和開發需求,選用豐富的動畫組件和接口來實現不同的
    的頭像 發表于 05-14 18:19 ?1086次閱讀
    HarmonyOS<b class='flag-5'>開發</b>案例:【購物車app】

    HarmonyOS開發案例:【轉場動畫

    在本教程中,我們將會通過簡單的樣例,學習如何基于ArkTS的聲明式開發范式開發轉場動畫。其中包含頁面間轉場、組件內轉場以及共享元素轉場。
    的頭像 發表于 05-06 15:42 ?1073次閱讀
    HarmonyOS<b class='flag-5'>開發</b>案例:【轉場<b class='flag-5'>動畫</b>】

    OpenHarmony實戰開發-管理系統窗口(僅Stage模型支持)

    連貫流暢。 在OpenHarmony中,應用窗口的動效為默認行為,不需要開發者進行設置或者修改。 相對于應用窗口,在顯示系統窗口過程中,開發者可以自定義窗口的顯示動畫、隱藏
    發表于 05-06 15:32

    OpenHarmony實戰開發-如何實現動畫

    請求動畫幀 請求動畫幀時通過requestAnimationFrame函數逐幀回調,在調用該函數時傳入回調函數。 runframe在調用requestAnimationFrame時
    發表于 05-06 14:11

    OpenHarmony實戰開發-如何實現組件動畫

    ArkUI為組件提供了通用的屬性動畫和轉場動畫能力的同時,還為些組件提供了默認的動畫效果。例如,List的滑動動效,Button的點擊動效,是組件自帶的默認
    的頭像 發表于 04-28 15:49 ?643次閱讀
    <b class='flag-5'>OpenHarmony</b>實戰<b class='flag-5'>開發</b>-如何實現組件<b class='flag-5'>動畫</b>。

    OpenHarmony南向開發實例:【游戲手柄】

    基于TS擴展的聲明式開發范式編程語言,以及OpenHarmony的分布式能力實現的手柄游戲。
    的頭像 發表于 04-17 10:21 ?773次閱讀
    <b class='flag-5'>OpenHarmony</b>南向<b class='flag-5'>開發</b>實例:【游戲手柄】

    鴻蒙開發案例:【圖像加載緩存庫ImageKnife】

    專門為OpenHarmony打造的款圖像加載緩存庫,致力于更高效、更輕便、更簡單。
    的頭像 發表于 03-23 16:48 ?877次閱讀
    鴻蒙<b class='flag-5'>開發</b>案例:【圖像<b class='flag-5'>加載</b>緩存庫ImageKnife】

    modusToolbox在加載離線庫時,總是在loading device_db時提示錯誤的原因?

    我的modusToolbox在加載離線庫時,總是在loading device_db時提示錯誤。信息如下: Finished download of file \'file:///D
    發表于 02-02 08:07

    鴻蒙開發之發動畫

    動畫的原理是在一個時間段內,多次改變UI外觀,由于人眼會產生視覺暫留,所以最終看到的就是“連續”的動畫。UI的
    的頭像 發表于 02-01 15:25 ?647次閱讀
    鴻蒙<b class='flag-5'>開發</b>之發<b class='flag-5'>動畫</b>篇
    主站蜘蛛池模板: 色琪琪无码成人AV视频| 扒开双腿疯进出爽爽爽动态图| 国产精品野外AV久久久| 亚洲合集综合久久性色| 免费毛片网站在线观看| 国产精品色无码AV在线观看| 一级淫片bbbxxx| 十8禁用B站在线看漫画| 毛茸茸womansex| 韩国女人高潮嗷嗷叫视频| no视频在线观看| 欲插爽乱浪伦骨| 校花被扒衣吸乳羞羞漫画| 欧美最猛黑人XXXXWWW| 黄色小说在线| 国产精品久久久久婷婷五月色 | 亚洲欧美精品一中文字幕| 欧美日韩中文国产一区| 黄色软件色多多| 国产精品看高国产精品不卡| 最近中文字幕MV高清在线视频| 午夜性爽视频男人的天堂在线 | 亚洲精品免费观看| 色欲天天天综合网免费| 奶好大下面流了好多水水| 精品久久免费观看| 国产午夜精AV在线麻豆| 纯肉宠文高h一对一| 99久久精品6在线播放| 艳鉧动漫1~6全集观看在线| 色戒床震视频片段| 秋葵app秋葵官网18在线观看| 久久综合亚洲色hezyo| 精品AV亚洲乱码一区二区| 国产精品高清视亚洲一区二区| 啊灬啊灬啊灬快高潮视频| 506070老熟肥妇bbwxx视频| 伊人久久天堂| 亚洲永久精品ww47| 亚洲野狼综合网站| 杨幂视频在线观看1分30秒|