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

OpenHarmony ETS UI 組件封裝之環形進度條

系統 OpenHarmony
本文介紹的是如何使用 TS 的容器組件 Stack 和繪制組件 Shape、Circle 封裝一個環形進度條。進度條主要由灰色背景環、藍色進度環、 進度文字三部分組成。

??想了解更多內容,請訪問:??

??51CTO OpenHarmony技術社區??

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

概述

本文介紹的是如何使用 TS 的容器組件 Stack 和繪制組件 Shape、Circle 封裝一個環形進度條。進度條主要由灰色背景環、藍色進度環、 進度文字三部分組成。

基礎組件介紹

1.Stack

堆疊容器,子組件按照順序依次入棧,后一個子組件覆蓋前一個子組件。

Stack(value:{alignContent?: Alignment})

alignContent:設置子組件在容器內的對齊方式

Alignment枚舉說明

參考文檔路徑:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-container-stack.md。

2.Shape

繪制組件的父組件,父組件中會描述所有繪制組件均支持的通用屬性。繪制組件使用Shape作為父組件,實現類似SVG的效果。

屬性:

LineCapStyle枚舉說明:

LineJoinStyle枚舉說明:

參考文檔路徑:

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

3.Circle

圓形繪制組件。

屬性:

參考文檔路徑:

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

繪制環形進度條組件

第一步:創建最外部容器

使用容器組件 Stack。

第二步:繪制灰色背景環

1.先使用Circle組件在Shape中繪制一個直徑為290的圓 并且設置 shape 的形狀的視口為 viewPort({x: 0, y: 0, width: 330, height: 330 })。

2.使用 stroke 屬性給圓繪制寬度為40的邊框,stroke 給圓繪制邊框的時候,在圓的內部繪制一半,在圓的外部繪制一半,此時圓的邊框的一半視口的外邊。

3.更改 viewPort 屬性值為 viewPort({x: -20, y: -20, width: 330, height: 330 }), 將視口向右向下平移20,并且更改fill屬性為none,就會得到一個圓環。

第三步:繪制進度環

1.按照第二步中的步驟繪制進度圓環。

2.根據進度的變化設置邊框間隙屬性 strokeDashArray:

實線長度表示當前進度:(this.progress / 100) * Math.PI * 圓的直徑

間隙長度表示剩余進度:((100 - this.progress) / 100) * Math.PI * 圓的直徑

3.繪制圓環的時候,是以圓心為原點(0,0)以右邊圓弧和x軸的交點為起點順時針繪制的,但是進度條的起始點應該在上邊圓弧和y軸的交點的地方,所以需要將圓環逆時針旋轉90度,可以通過設置屬性rotate({x: 0, y: 0, z: 1, angle: -90 }) 將圓環逆時針旋轉90度變換起始位置。

第四步:繪制進度文字

使用Text組件繪制中間的text文字

組件代碼

@Component
struct CircularProgress {
@Prop progress: number;
private viewWH: number;
private barWidth: number;
private circleDia: number;
build() {
Stack({ alignContent: Alignment.Center }) {
// 背景環
Shape() {
Circle().width(this.circleDia).height(this.circleDia)
}
// 形狀的視口
.viewPort({
x: - this.barWidth / 2,
y: - this.barWidth / 2,
width: this.viewWH,
height: this.viewWH
})
// 填充顏色
.fill('none')
// 邊框顏色
.stroke($r('app.color.color_000000'))
// 邊框透明度
.strokeOpacity(0.03)
// 邊框的寬度
.strokeWidth(this.barWidth)
// 路徑端點繪制樣式
.strokeLineCap(LineCapStyle.Round)

// 進度圈
Shape() {
Circle().width(this.circleDia).height(this.circleDia)
}
// 形狀的視口
.viewPort({
x: - this.barWidth / 2,
y: - this.barWidth / 2,
width: this.viewWH,
height: this.viewWH
})
// 填充顏色
.fill('none')
// 邊框顏色
.stroke($r('app.color.color_254FF7'))
// 邊框的寬度
.strokeWidth(this.barWidth)
// 路徑端點繪制樣式
.strokeLineCap(LineCapStyle.Round)
// 邊框的間隙
.strokeDashArray([
(this.progress / 100) * Math.PI * this.circleDia,
((100 - this.progress) / 100) * Math.PI * this.circleDia,
])
// 逆時針旋轉90度,改變圓環的起始位置
.rotate({
x: 0,
y: 0,
z: 1,
angle: -90
})
// 文字
Row({space: 2}) {
Text(this.progress.toString())
.fontSize(60)
.fontWeight(FontWeight.Bold)
.fontColor($r('app.color.color_000000'))
.opacity(0.9)
Text('%')
.fontSize(20)
.fontWeight(FontWeight.Bold)
.fontColor($r('app.color.color_000000'))
.opacity(0.6)
.margin({ top: 46, bottom: 11 })

}
.height(68)
}
.width(ConfigData.WH_100_100)
}
}

總結

除了使用容器組件 Stack 和繪制組件 Shape、Circle 封裝一個環形進度條。還可以使用繪制組件 Path 或者是畫布組件 Canvas 繪制環形的進度條。相比較之下,使用容器組件 Stack 和繪制組件 Shape、Circle 繪制是較為簡單的一種方法。

??想了解更多內容,請訪問:??

??51CTO OpenHarmony技術社區??

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

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

2022-03-21 15:19:27

鴻蒙UI組件ets自定義

2022-02-17 14:51:39

HarmonyOSJSPAI開發canvas畫布

2015-07-31 11:19:43

數字進度條源碼

2021-12-30 16:10:52

鴻蒙HarmonyOS應用

2024-04-01 08:18:52

CSSHTMLWeb

2021-09-27 10:43:18

鴻蒙HarmonyOS應用

2011-07-05 15:16:00

QT 進度條

2024-08-06 14:29:37

2021-09-06 14:58:23

鴻蒙HarmonyOS應用

2022-05-20 10:56:54

AbilityeTS FA調用

2009-08-17 14:36:15

C#進度條實現

2022-07-12 17:03:43

鴻蒙網絡請求庫

2012-01-17 13:58:17

JavaSwing

2017-03-14 15:09:18

AndroidView圓形進度條

2009-08-17 15:05:41

C#進度條

2023-12-11 17:15:05

應用開發波紋進度條ArkUI

2009-06-06 18:54:02

JSP編程進度條

2024-06-13 08:15:00

2009-08-17 14:41:47

C#進度條實現

2009-08-18 09:49:00

C# listview
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久免费观看 | 国产电影一区二区 | 日韩中文字幕一区二区 | 国产高清区 | 欧美区在线| 91大神在线资源观看无广告 | 久久网站免费视频 | 99久久久99久久国产片鸭王 | 91日韩| 亚洲高清电影 | 91精品久久 | 四虎影音| 久久一区二区免费视频 | 日韩av一区在线观看 | 亚洲欧洲在线看 | 懂色中文一区二区在线播放 | 欧美日韩在线精品 | 国产在线精品一区二区 | 奇米久久 | 久久99网 | 99久久精品国产一区二区三区 | 亚洲精品2区 | 国产色网站 | 日本一区二区不卡视频 | 午夜亚洲 | 美女视频黄色的 | 91精品国产综合久久精品图片 | 国产在线一区二区 | 男女污污网站 | 干干天天 | 狠狠色网 | 精品视频久久久久久 | 国产成人免费视频网站高清观看视频 | 精品免费在线 | 高清一区二区视频 | 综合久久av | 精品免费国产一区二区三区 | 国产福利91精品一区二区三区 | 国产精品99一区二区 | 中文二区 | 亚洲第一视频网 |