成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony3.1組件:用滑桿組件控制風車

系統 OpenHarmony
OpenHarmony3.1支持很多組件,這篇文章演示一下如何使用滑桿組件(Slider)控制另一個組件。這個案例通過兩個Slider組件分別控制屏幕上方風車的旋轉速度和大小。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

OpenHarmony3.1支持很多組件,這篇文章演示一下如何使用滑桿組件(Slider)控制另一個組件。這個案例通過兩個Slider組件分別控制屏幕上方風車的旋轉速度和大小。讀者可以從中學到Slider組件的基本用法,以及在OpenHarmony中如何控制組件。

OpenHarmony3.1目前支持ETS和JS。本文選用了ETS作為開發語言。要想測試本文的代碼,有如下兩種方式:

1.  使用HarmonyOS SDK7在遠程模擬器中測試。

2. 使用大禹200開發板(或其他支持OpenHarmony3.1的開發板)測試。

第一種方式只能使用SDK7或以上版本才支持ETS,本章會采用第二種方式,在大禹200開發板中測試這個程序,運行的效果如下圖所示。

#DAYU200體驗官# OpenHarmony3.1組件:用滑桿組件控制風車-開源基礎軟件社區

通過第1個Slider組件可以控制風車旋轉的速度,通過第2個Slider組件可以控制風車的大小,下圖是風車縮小的效果。

#DAYU200體驗官# OpenHarmony3.1組件:用滑桿組件控制風車-開源基礎軟件社區

本文會使用ETS編寫代碼,所以創建工程時保持默認值即可,如下圖所示。

#DAYU200體驗官# OpenHarmony3.1組件:用滑桿組件控制風車-開源基礎軟件社區

創建完工程,需要找一個風車圖像,然后將該圖像放到如下圖所示的目錄中。

#DAYU200體驗官# OpenHarmony3.1組件:用滑桿組件控制風車-開源基礎軟件社區

本案例中的所有邏輯代碼都在index.ets中編寫。由于圖像放到了rawfile目錄中,所以需要用Image組件顯示rawfile中的圖像,代碼如下:

Image($rawfile('windmill.png'))
.objectFit(ImageFit.Contain)
.height(150)
.width(150)
.margin({ top: 300, bottom: 300, right: 16 })
.rotate({ x: 0, y: 0, z: 1, angle: this.angle })
.scale({ x: this.imageSize, y: this.imageSize })

在Image組件中設置了很多屬性,如height、width等,這些都是使用靜態值設置的,而旋轉角度(this.angle)和圖像縮放比例(this.imageSize)都使用了變量進行設置,這也是OpenHarmony控制組件的方式。OpenHarmony采用了將變量值與屬性的某個屬性綁定的方式控制設置或獲取組件的屬性值,所以要想修改組件的某個屬性值,并需要獲取組件對象本身,而是直接修改與該屬性綁定的變量。

用于控制風車圖像縮放比例的Slider組件的代碼如下:

Slider({
value: this.speed,
min: 1,
max: 10,
step: 1,
style: SliderStyle.OutSet
})
.showTips(true)
.blockColor(Color.Blue)
.onChange((value: number, mode: SliderChangeMode) => {
this.speed = value
clearInterval(this.interval)
this.speedChange()
})

在這段代碼中有一個關鍵,就是onChange方法中的this.speed = value。當Slider組件的滑桿滑動時,會觸發onChange方法,value參數值就是滑桿的當前值。而this.speed是全局變量,表示風車每次轉動變化的角度,也就是Image組件中rotate方法設置的this.angle的增速。

為了讓風車轉動,使用了定時器每隔一定時間改變Image組件的旋轉角度,代碼如下:

speedChange() {
var that = this;
that.angle = 0;
// 創建定時器,每隔15毫秒更新一次Image組件的角度
this.interval = setInterval(function () {
that.angle += that.speed
}, 15)
}
// 頁面啟動調用該函數
onPageShow() {
// 先清除定時器
clearInterval(this.interval)
// 啟動定時器
this.speedChange()
}

本案例完整的代碼如下:

@Entry
@Component
struct Index {
@State private speed: number = 5
@State private imageSize: number = 1
@State private angle: number = 0
@State private interval: number = 0

@Builder DescribeText(text:string, speed: number) {
Stack() {
Text(text + speed.toFixed(1))
.margin({ top: 30 })
.fontSize(20)
.fontWeight(FontWeight.Bold)
}
}

build() {
Column() {
Image($rawfile('windmill.png'))
.objectFit(ImageFit.Contain)
.height(150)
.width(150)
.margin({ top: 300, bottom: 300, right: 16 })
.rotate({ x: 0, y: 0, z: 1, angle: this.angle })
.scale({ x: this.imageSize, y: this.imageSize })
// 創建Text組件(用于描述Slider組件)
this.DescribeText('速度:', this.speed)

Slider({
value: this.speed,
min: 1,
max: 10,
step: 1,
style: SliderStyle.OutSet
})
.showTips(true)
.blockColor(Color.Blue)
.onChange((value: number, mode: SliderChangeMode) => {
this.speed = value
console.log("value:" + value);
clearInterval(this.interval)
this.speedChange()
})
// 創建Text組件(用于描述Slider組件)
this.DescribeText('縮放比例:', this.imageSize)
// 用于控制縮放比例
Slider({
value: this.imageSize,
min: 0.5,
max: 4.5,
step: 0.1,
style: SliderStyle.OutSet
})
.showTips(true)
.blockColor(Color.Red)
.onChange((value: number, mode: SliderChangeMode) => {
this.imageSize = value
})
}
.margin({ left: 30, right: 30 })
}

speedChange() {
var that = this;
that.angle = 0;
this.interval = setInterval(function () {
that.angle += that.speed
}, 15)
}

onPageShow() {
clearInterval(this.interval)
this.speedChange()
}
}

在這段代碼中使用了DescribeText方法創建Text組件,這是由于Text組件會被使用多次,所以做了一個方法統一創建Text組件,會減少代碼的冗余。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-05-07 16:13:59

DevEcoTool鴻蒙

2022-06-01 22:41:29

轉場動畫鴻蒙

2022-07-06 20:40:27

舒爾特方格鴻蒙

2012-11-07 10:09:11

組件技術OAuth授權登陸

2022-04-26 14:33:21

鴻蒙操作系統

2022-06-28 14:42:26

ETS購物車應用

2022-07-27 14:30:15

分布式數據鴻蒙

2023-08-24 16:45:16

應用開發父自定義組件

2010-01-27 09:08:43

Windows 7瘦身

2022-04-21 11:55:06

Audio鴻蒙操作系統

2010-07-22 17:14:37

2022-08-17 16:38:46

WLAN接口組件功能

2022-02-14 14:14:02

鴻蒙數據可視化JS

2009-11-25 17:31:15

Visual Stud

2023-07-17 16:13:21

組件模塊開發的鴻蒙

2023-08-08 14:31:42

輪播圖鴻蒙

2021-08-28 18:29:46

微軟Windows 11Windows

2022-03-28 15:40:34

harmony鴻蒙操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: zzzwww在线看片免费 | 欧美日韩高清 | 精品久 | 欧美色专区 | 国产专区在线 | 国产午夜精品一区二区三区四区 | 精品一区二区三区在线观看国产 | 人人看人人射 | 日韩一区二区三区视频 | 国外成人在线视频网站 | 91视频免费黄 | 天天夜天天操 | 国产精品日韩 | 久久高清国产视频 | 国产精品久久久免费 | 伊人性伊人情综合网 | av中文字幕在线播放 | 韩日精品视频 | 亚洲成人第一页 | 免费黄色av网站 | 亚州无限乱码 | 亚洲一区二区三区四区五区午夜 | 亚洲国产免费 | 久久国内精品 | 中文字幕国产精品 | 亚洲精品久久视频 | 亚洲精品一区中文字幕乱码 | 久久噜噜噜精品国产亚洲综合 | 在线日韩不卡 | 精品一区二区三区在线观看 | 国产精品久久久久久久久久三级 | 国产高清视频一区二区 | 国产一区二区三区四区 | 又爽又黄axxx片免费观看 | 九九热在线视频 | 亚洲国产精品久久 | 亚洲国产小视频 | 日本网站在线看 | 亚洲精品日韩在线 | 91久久精品 | 午夜小视频在线播放 |