介紹
在本教程中,我們將通過一個簡單的樣例,學習如何使用聲明式UI編程框架的基礎(chǔ)組件。本篇Codelab將會使用Image組件、Slider組件、Text組件共同實現(xiàn)一個可調(diào)節(jié)的風車動畫,實現(xiàn)效果如圖所示:

相關(guān)概念
- [Text組件]:文本組件,用于呈現(xiàn)一段信息。
- [Image組件]:圖片組件,用來渲染展示圖片。
- [Slider組件]:滑動條組件,用來快速調(diào)節(jié)設(shè)置值,如音量、亮度等。
環(huán)境搭建
軟件要求
- [DevEco Studio]版本:DevEco Studio 3.1 Release。
- OpenHarmony SDK版本:API version 9。
硬件要求
- 開發(fā)板類型:[潤和RK3568開發(fā)板]。
- OpenHarmony系統(tǒng):3.2 Release。
環(huán)境搭建
完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以RK3568開發(fā)板為例,參照以下步驟進行:
- [獲取OpenHarmony系統(tǒng)版本]:標準系統(tǒng)解決方案(二進制)。以3.2 Release版本為例:

- 搭建燒錄環(huán)境。
- [完成DevEco Device Tool的安裝]
- [完成RK3568開發(fā)板的燒錄]
- 搭建開發(fā)環(huán)境。
代碼結(jié)構(gòu)解讀
本篇Codelab只對核心代碼進行講解,完整代碼可以直接從gitee獲取。
├──entry/src/main/ets // 代碼區(qū)
│ ├──common
│ │ └──Constants.ets // 常量
│ ├──entryability
│ │ └──EntryAbility.ts // 應用的入口
│ ├──pages
│ │ └──SliderPage.ets // 入口頁面
│ └──view
│ └──PanelComponent.ets // 自定義組件
└──entry/src/main/resources // 資源文件目錄
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
頁面結(jié)構(gòu)
整個程序的頁面構(gòu)造十分簡潔,由Image組件構(gòu)成風車。自定義組件PanelComponent由Text組件和Slider組件構(gòu)成,用來顯示文本和控制圖像,效果如圖所示:

添加風車
在SliderPage文件中,添加Image組件,給定使用圖片的路徑,并配置通用屬性[圖形變換]中的rotate屬性和scale屬性。自此,頁面中已經(jīng)有了風車的圖像。
// SliderPage.ets
...
build() {
Column() {
Image($rawfile('windmill.png'))
.objectFit(ImageFit.Contain)
.height(Constants.IMAGE_SIZE)
.width(Constants.IMAGE_SIZE)
.rotate({
x: RotatePosition.X,
y: RotatePosition.Y,
z: RotatePosition.Z,
angle: this.angle
})
.scale({ x: this.imageSize, y: this.imageSize })
...
}
.justifyContent(FlexAlign.End)
.height(Constants.PERCENTAGE_100)
.backgroundColor($r('app.color.background_color'))
}
...
效果如圖所示:

如何讓風車動起來
在speedChange()函數(shù)中,以固定的時間間隔調(diào)整rotate的角度,也就是參數(shù)angle。onPageShow是SliderPage頁面的生命周期方法,在其中調(diào)用speedChange()函數(shù),表示從程序啟動時,便開始執(zhí)行。自此我們已經(jīng)實現(xiàn)了風車的旋轉(zhuǎn)效果。代碼如下:
// SliderPage.ets
...
speedChange(): void {
this.angle = Constants.ANGLE;
this.interval = setInterval(() = > {
this.angle += this.speed;
}, Constants.DELAY_TIME)
}
onPageShow(): void {
clearInterval(this.interval);
this.speedChange();
}
...
調(diào)節(jié)風車的轉(zhuǎn)速
在PanelComponent的構(gòu)造參數(shù)中,給定調(diào)節(jié)轉(zhuǎn)速的初始值和樣式。在callback事件中,將子組件Slider滑動的value給到事先定義好的變量speed,實現(xiàn)Text組件的更新,并且通過調(diào)用speedChange()方法實現(xiàn)轉(zhuǎn)速的改變。代碼如下:
// SliderPage.ets
...
PanelComponent({
mode: SliderMode.SPEED,
title: $r('app.string.speed_text'),
text: this.speed.toFixed(Constants.FRACTION_DIGITS),
callback: ((value: number, mode: SliderChangeMode) = > {
this.speed = value;
clearInterval(this.interval);
this.speedChange();
}),
options: {
value: this.speed,
min: SliderSpeed.MIN,
max: SliderSpeed.MAX,
step: SliderSpeed.STEP,
style: SliderStyle.InSet
}
})
...
調(diào)節(jié)風車的大小
在PanelComponent的構(gòu)造參數(shù)中,給定調(diào)節(jié)大小的初始值和樣式。在callback事件中,將子組件Slider滑動的value給到事先定義好的變量imageSize,實現(xiàn)Text組件的更新和調(diào)節(jié)風車大小。代碼如下:
// SliderPage.ets
...
PanelComponent({
mode: SliderMode.SCALE,
title: $r('app.string.scale_text'),
text: this.imageSize.toFixed(Constants.FRACTION_DIGITS),
callback: ((value: number, mode: SliderChangeMode) = > {
this.imageSize = value;
}),
options: {
value: this.imageSize,
min: SliderScale.MIN,
max: SliderScale.MAX,
step: SliderScale.STEP,
style: SliderStyle.InSet
}
})
.margin({
bottom: Constants.PANEL_MARGIN_BOTTOM,
top: Constants.PANEL_MARGIN_TOP
});
...
-
HarmonyOS
+關(guān)注
關(guān)注
80文章
2157瀏覽量
36320 -
OpenHarmony
+關(guān)注
關(guān)注
33文章
3977瀏覽量
21377 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
194瀏覽量
5558
發(fā)布評論請先 登錄
HarmonyOS開發(fā)案例:【使用List組件實現(xiàn)商品列表】
HarmonyOS IoT 硬件開發(fā)案例分享
HarmonyOS應用開發(fā)資料(Svg組件)
【組件資料】HarmonyOS三方件開發(fā)指南
HarmonyOS/OpenHarmony應用開發(fā)-聲明式開發(fā)范式組件匯總
HarmonyOS/OpenHarmony原生應用-ArkTS萬能卡片組件Slider
HarmonyOS鴻蒙原生應用開發(fā)設(shè)計- 服務組件庫
華為開發(fā)者分論壇HarmonyOS學生公開課-OpenHarmony Codelabs開發(fā)案例
HarmonyOS開發(fā)案例:【 switch、chart組件的使用】
【HarmonyOS 5】金融應用開發(fā)鴻蒙組件實踐
HarmonyOS開發(fā)案例:【基礎(chǔ)組件Slider的使用】
評論