0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙上做一個loading加載動畫

OpenHarmony技術(shù)社區(qū) ? 來源:OST開源開發(fā)者 ? 2023-04-17 10:20 ? 次閱讀

本篇文章介紹了如何實現(xiàn)一個簡單的 loading 加載動畫,并且在文末提供了一個 demo 工程供讀者下載學(xué)習(xí)。

作為一個 OpenHarmony 南向開發(fā)者,接觸北向應(yīng)用開發(fā)并不多。北向開發(fā) ArkUI 老是改來改去,對筆者這樣的入門選手來說學(xué)習(xí)成本其實非常大,希望后面可以慢慢穩(wěn)定下來吧。

最近努力學(xué)習(xí)了一些,下面將學(xué)習(xí)經(jīng)驗分享如下:

使用 ImageAnimator 幀動畫組件實現(xiàn)一個自定義 loading 加載動畫

使用 Progress 進(jìn)度條組件實現(xiàn) loading 加載動畫。

筆者開發(fā)環(huán)境:(文末附有 demo ArkUI 應(yīng)用源碼,一定得是以下 IDE 和 SDK 版本或者更高版本才能編譯運(yùn)行,這也是坑點之一!??!)

開發(fā)板:潤和軟件 DAYU200 開發(fā)板

OpenHarmony 版本:OpenHarmony3.2 Beta5

IDE:DevEco Studio 3.1.0.200

SDK:API9(3.2.10.6)

效果演示:

30ef34d8-dc25-11ed-bfe3-dac502259ad0.gif

①涉及到的知識點

ImageAnimator 幀動畫組件:

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

Progress 進(jìn)度條組件:

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 組件導(dǎo)讀:

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

②使用 ImageAnimator 幀動畫組件自定義 loading 動畫開發(fā)步驟

代碼如下:

├──ets
│├──loading#loading動畫圖片幀
│└──pages#ets代碼
│├──Index.ets
│├──loadingComponent_part1.ets
│├──loadingComponent_part2.ets#ImageAnimator幀動畫組件實現(xiàn)自定義loading加載動畫
│└──loadingComponent_part3.ets#Progress進(jìn)度條組件實現(xiàn)的loading加載動畫

(1)將自定義的 loading 動畫的圖片幀放在 ets 目錄下

組成自定義的 loading 動畫的圖片幀,詳情請見文末提供的 demo 工程。

319fb0f6-dc25-11ed-bfe3-dac502259ad0.png

在 entrysrcmainets 新建一個 loading 目錄,將其放在該目錄下:

31b21e76-dc25-11ed-bfe3-dac502259ad0.png

(2)用幀動畫組件將動畫封裝成一個自定義組件

ImageAnimator 幀動畫組件:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-imageanimator.md
在 entrysrcmainetspages 下新建 .ets 文件:
//loadingComponent_part1.ets
@Component

exportdefaultstructloadingComponent_part1{
privateimageWidth:number|Resource=0
privateimageHeight: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)
//設(shè)置播放順序。false表示從第1張圖片播放到最后1張圖片;true表示從最后1張圖片播放到第1張圖片。

.fixedSize(true)
//設(shè)置圖片大小是否固定為組件大小。true表示圖片大小與組件大小一致,此時設(shè)置圖片的width 、height 、top 和left屬性是無效的。false表示每一張圖片的width 、height 、top和left屬性都要單獨(dú)設(shè)置。

.reverse(true)
//設(shè)置播放順序。false表示從第1張圖片播放到最后1張圖片;true表示從最后1張圖片播放到第1張圖片。

.fillMode(FillMode.None)
//設(shè)置動畫開始前和結(jié)束后的狀態(tài),可選值參見FillMode說明

.state(AnimationStatus.Running)
//Running表示動畫處于播放狀態(tài)
}
}
}

(3)在主頁面實現(xiàn)自定義的 loading 動畫

首先導(dǎo)入自定義的 loading 動畫:

importloading1from'./loadingComponent_part1';

使用 CustomDialogController 自定義彈窗組件自定義一個彈窗用于在主頁面實現(xiàn) loading 動畫。

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

代碼如下:

structIndex{
//用來繪制loading動畫的
//要打開在點擊事件中添加this.loading1.open();
//要關(guān)閉在點擊事件中添加this.loading1.close();
//通過CustomDialogController類顯示自定義彈窗。
privateloading1:CustomDialogController=newCustomDialogController({
builder:loadingProgress_part1(),
alignment:DialogAlignment.Center,
offset:({dx:0,dy:0}),
autoCancel:false,
customStyle:true
});
}

//用來繪制loading動畫的
@CustomDialog
structloadingProgress_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)//設(shè)置按鈕顏色
.onClick(()=>{

//開始繪制loading動畫
this.loading1.open();
//使用一個setTimeout定時器,setTimeout中第一個參數(shù)使用()=>{要執(zhí)行的函數(shù)}
//this.ocrDialog.close();是關(guān)閉loading動畫
setTimeout(()=>{this.loading1.close();},3000);

})

實現(xiàn)效果:

31c36816-dc25-11ed-bfe3-dac502259ad0.gif

③使用 Progress 進(jìn)度條組件實現(xiàn) loading加載動畫開發(fā)步驟

Progress 進(jìn)度條組件:

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

部分代碼如下:

structIndex{
@Statei:number=0

//aboutToAppear 函數(shù)在創(chuàng)建自定義組件的新實例后,在執(zhí)行其build函數(shù)之前執(zhí)行。
aboutToAppear(){
//定時器中的setInterval:重復(fù)調(diào)用一個函數(shù),在每次調(diào)用之間具有固定的時間延遲。
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})
...
}

}

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5087

    瀏覽量

    97785
  • 開發(fā)環(huán)境
    +關(guān)注

    關(guān)注

    1

    文章

    226

    瀏覽量

    16655
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1040

    瀏覽量

    46052
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2377

    瀏覽量

    42922
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3730

    瀏覽量

    16424

原文標(biāo)題:鴻蒙上做一個loading加載動畫

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    [OpenHarmony北向應(yīng)用開發(fā)] 做一個 loading加載動畫

    - 本篇文章介紹了如何實現(xiàn)簡單的loading加載動畫,并且在提供了
    的頭像 發(fā)表于 04-20 11:29 ?1932次閱讀
    [OpenHarmony北向應(yīng)用開發(fā)] <b class='flag-5'>做一個</b> <b class='flag-5'>loading</b><b class='flag-5'>加載</b><b class='flag-5'>動畫</b>

    【HarmonyOS】鴻蒙圖片加載工具匯總

    庫。Glide 的主要重點是使?jié)L動任何類型的圖像列表盡可能平滑和快速,但 Glide 也適用于幾乎所有需要獲取、調(diào)整大小和顯示遠(yuǎn)程圖像的情況。2、鴻蒙圖片加載工具——frescoFresco 是
    發(fā)表于 03-25 13:51

    鴻蒙JS開發(fā)接口請求loading怎么解決?

    鴻蒙JS開發(fā)接口請求loading?
    發(fā)表于 05-10 10:24

    Android中的alpha動畫是這個AlphaAnimation, 鴻蒙的alpha動畫是哪一個?

    Android中的alpha動畫是這個AlphaAnimation,鴻蒙的alpha動畫是哪一個
    發(fā)表于 06-15 10:29

    請問鴻蒙hap包是否支持插件化開發(fā)?

    如題,安卓上可以使用dexclassloader機(jī)制動態(tài)加載其他apk作為插件使用,鴻蒙上用類似的能力嗎?有什么解決方案呢?
    發(fā)表于 06-16 11:34

    鴻蒙上使用Python進(jìn)行物聯(lián)網(wǎng)編程

    炫耀!然而,這卻是非常重要的步:在鴻蒙上用使用 Python 進(jìn)行物聯(lián)網(wǎng)編程是可行的?。?! 既然可行,加上 Python 語言天生的優(yōu)勢(易于掌握,開發(fā)效率高),那么真的值得持續(xù)打造,將鴻蒙上的 Python 進(jìn)行到底。 所以
    的頭像 發(fā)表于 09-28 09:55 ?4341次閱讀
    在<b class='flag-5'>鴻蒙上</b>使用Python進(jìn)行物聯(lián)網(wǎng)編程

    如何用所學(xué)的鴻蒙知識做一個小應(yīng)用

    ?? 今時今日,不管是大人,還是小孩,都喜歡刷視頻,生活中刷視頻的 APP 也多得是,如:抖音,快手,視頻號,今日頭條,火山…數(shù)也不數(shù)不清了。 ??? ? 然而華為論壇鴻蒙版塊搞活動,做一個屬于自己
    的頭像 發(fā)表于 10-19 09:23 ?1769次閱讀

    鴻蒙上安裝按鈕實現(xiàn)下載、暫停、取消、顯示等操作

    今天給大家分享在鴻蒙上一個按鈕實現(xiàn)下載、暫停、取消、顯示下載進(jìn)度操作。
    的頭像 發(fā)表于 01-04 14:32 ?2340次閱讀

    支持上拉加載和下拉刷新的鴻蒙版基礎(chǔ)控件教程

    介紹 這是支持上拉加載和下拉刷新的鴻蒙版基礎(chǔ)控件,用于頁面數(shù)據(jù)刷新和加載 軟件架構(gòu) 軟件架構(gòu)說明 使用
    發(fā)表于 03-29 13:35 ?0次下載

    視圖動畫加載用法案例

    : 《 com 。github 。.jlmd _ 動畫加載視圖。AnimatedCircleLoadingView ohos: id = “$+id:circle_loading_view” ohos
    發(fā)表于 03-31 09:06 ?1次下載

    高仿新版的加載動畫控件

    描述 高仿新版58加載動畫控件 集成 allprojects{ repositories{ mavenCentral() } } implementation ‘io.openha
    發(fā)表于 03-31 09:17 ?0次下載
    <b class='flag-5'>一</b><b class='flag-5'>個</b>高仿新版的<b class='flag-5'>加載</b><b class='flag-5'>動畫</b>控件

    用于openharmony和動畫加載視圖控件

    描述 簡單的加載視圖,用于openharmony和動畫。簡單的帶有動畫效果的加載控件。 依賴
    發(fā)表于 03-31 09:21 ?4次下載

    鴻蒙開發(fā)者使用的計數(shù)動畫文本視圖

    該三方開源庫從github fork過來,主要將底層接口調(diào)用的實現(xiàn)修改成鴻蒙接口的實現(xiàn),將三方庫鴻蒙化,供開發(fā)鴻蒙應(yīng)用的開發(fā)者使用。 計數(shù)動畫文本視圖
    發(fā)表于 04-02 14:26 ?1次下載

    鴻蒙上實現(xiàn)“數(shù)字華容道”小游戲

    本篇文章教大家如何在鴻蒙上實現(xiàn)“數(shù)字華容道”小游戲。
    的頭像 發(fā)表于 12-26 09:52 ?1271次閱讀

    鴻蒙上開發(fā)“小蜜蜂”游戲

    小時候我們有熟悉的游戲叫小蜜蜂。本文教大家在鴻蒙上學(xué)做這個小蜜蜂游戲。
    的頭像 發(fā)表于 04-03 11:27 ?1716次閱讀