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

ArkUI eTS健康飲食APP之自定義PieChart組件

系統 OpenHarmony
此帖詳細介紹基于畫布組件Canvas上,畫一個餅圖自定義組件,這里先來了解一下Canvas組件的屬性和方法。

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

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

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

前言

此帖詳細介紹基于畫布組件Canvas上,畫一個餅圖自定義組件,這里先來了解一下Canvas組件的屬性和方法,下面先顯示此帖子Demo的效果:

#打卡不停更#ArkUI eTS健康飲食APP之自定義PieChart組件-開源基礎軟件社區

Canvas組件

#打卡不停更#ArkUI eTS健康飲食APP之自定義PieChart組件-開源基礎軟件社區
#打卡不停更#ArkUI eTS健康飲食APP之自定義PieChart組件-開源基礎軟件社區
#打卡不停更#ArkUI eTS健康飲食APP之自定義PieChart組件-開源基礎軟件社區
#打卡不停更#ArkUI eTS健康飲食APP之自定義PieChart組件-開源基礎軟件社區

這里只是此自定義組件用到Canvas畫布組件的關鍵屬性,接口;要查看更多的關于Canvas參數接口,請移步到官方文檔:?https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-canvasrenderingcontext2d-0000001333720961。

Demo介紹

創建一個新的eTS文件,用來編寫自定義PicChart組件,代碼如下:

@Component
export struct CustomPieChart {
// 餅圖數據
private picChartElements: PicChartElement[]
// 圓半徑
@State circle_radius:number = 80
// 單位
@State unit: string = "克"
// 獲取上下文
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

aboutToAppear() {
let total = 0
// 統計總數量
this.picChartElements.forEach((value) => {
total += value.quantity
})

// 初始化 弧線的終止弧度
let lastEndAngle = -0.5 * Math.PI
// 封裝餅圖數據
this.picChartElements.forEach((value) => {
// 占用百分比
let percent = value.quantity / total
// 四舍五入,獲取整數
value.percent = Math.round(percent * 100)
// 初始化終止弧度為 弧線的起始弧度
value.beginAngle = lastEndAngle
// 計算弧線的終止弧度
value.endAngle = (percent * 2 * Math.PI) + lastEndAngle
// 賦值終止弧度為變量,作為下次的起始弧度
lastEndAngle = value.endAngle
// 返回封裝好的對象
return value
})
}

build() {
Column({space: 30}) {
Canvas(this.context)
// 高度為半徑2倍
.height(this.circle_radius * 2)
// 縱橫比,寬度和高度一樣
.aspectRatio(1)
// 畫布組件的事件回調,可以在此時進行繪制
.onReady(() => {
this.picChartElements.forEach((item) => {
// 創建一個新的控制路徑
this.context.beginPath()
// 路徑從當前點移動到指定點
this.context.moveTo(this.circle_radius, this.circle_radius)
// 繪制弧線路徑(弧線圓心的x坐標值,弧線圓心的y坐標值,弧線的圓半徑,弧線的起始弧度,弧線的終止弧度)
this.context.arc(this.circle_radius, this.circle_radius, this.circle_radius, item.beginAngle, item.endAngle)
// 指定繪制的填充色
this.context.fillStyle = item.color
// 對封閉路徑進行填充
this.context.fill()
})
})
Flex({direction: FlexDirection.Row, wrap: FlexWrap.Wrap, justifyContent: FlexAlign.SpaceAround}) {
ForEach(this.picChartElements, (item: PicChartElement) => {
Row({ space: 4 }) {
// 標注圓點顏色
Circle({ width: 8, height: 8 }).fill(item.color)
// 標注文本
Text(item.element).fontSize(12)
// 標注數量
Text(item.quantity + ' ' + this.unit).fontSize(12)
}
.height(30)
})
}
.width('100%')
}
.width('100%')
}
}
export class PicChartElement {
element: Resource | string // 顯示文本
quantity: number // 數量
percent: number // 百分比
beginAngle: number // 弧線的起始弧度
endAngle: number // 弧線的終止弧度
color: string // 顏色
constructor(element: Resource | string, quantity: number, color: string) {
this.element = element
this.quantity = quantity
this.color = color
}
}

通過import引用自定義PieChart組件到要使用的頁面,創建Sample頁面,根據PieChart數據實體類定義餅圖數據源,文本,數量,顏色對象,餅圖半徑,顯示單位可選,默認半徑為80,單位為克。具體使用方法看Sample代碼如下:

// 引用自定義組件
import { CustomPieChart, PicChartElement } from '../components/CustomPieChart'
@Entry
@Component
struct SampleCustomPicChart {
// 餅圖1數據
private picChartElements: PicChartElement[] = [
new PicChartElement('蛋白質', 14.9, '#ff9421'),
new PicChartElement('脂肪', 39.8, '#ffd100'),
new PicChartElement('碳水', 19.1, '#4cd041'),
new PicChartElement('甜點', 9.1, '#4cd0ee'),
new PicChartElement('海鮮', 11.1, '#999999')
]
// 餅圖2數據
private picChartElements2: PicChartElement[] = [
new PicChartElement('蛋白質', 5.9, '#ff9421'),
new PicChartElement('脂肪', 9.8, '#ffd100'),
new PicChartElement('碳水', 7.1, '#4cd041')
]
build() {
Column({ space: 10 }) {
// 餅圖1 (半徑,單位使用默認值)
CustomPieChart({picChartElements: this.picChartElements})
// 餅圖2 (半徑指定為120, 單位指定為kcal)
CustomPieChart({picChartElements: this.picChartElements2, circle_radius: 120, unit: 'kcal'})
}
.width('100%')
.padding(30)
}
}

總結

通過此帖,可以簡單學會自定義PieChart組件,如何引用使用,在健康飲食APP里,再次完成了一小部分內容,下來繼續一個個組件完成,然后拼裝就出來一個健康飲食APP了。

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

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

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

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2022-10-09 15:13:18

TextPickerArkUI eTS

2022-05-26 14:50:15

ArkUITS擴展

2022-05-20 14:34:20

list組件鴻蒙操作系統

2022-09-16 15:34:32

CanvasArkUI

2021-11-24 10:02:53

鴻蒙HarmonyOS應用

2022-03-21 15:19:27

鴻蒙UI組件ets自定義

2022-07-06 20:24:08

ArkUI計時組件

2022-05-23 10:53:54

canvas柱狀圖鴻蒙

2022-10-08 16:26:23

APP應用開發

2022-06-20 15:43:45

switch開關鴻蒙

2021-11-01 10:21:36

鴻蒙HarmonyOS應用

2022-06-30 14:02:07

鴻蒙開發消息彈窗組件

2022-07-15 16:45:35

slider滑塊組件鴻蒙

2022-07-12 16:56:48

自定義組件鴻蒙

2022-07-15 16:39:46

ETS導航欄組件

2021-12-24 15:46:23

鴻蒙HarmonyOS應用

2022-04-24 15:17:56

鴻蒙操作系統

2022-01-25 17:05:44

ArkUI_eTS操作系統鴻蒙

2021-01-11 11:36:23

鴻蒙HarmonyOSApp開發

2023-02-20 15:20:43

啟動頁組件鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人在线免费 | 亚洲成人综合在线 | 男人天堂网址 | 国产精品久久久久一区二区三区 | 国产激情一区二区三区 | a久久久久久 | 免费黄色av网站 | 毛片免费在线 | 日韩一| 成人免费观看男女羞羞视频 | 天天操人人干 | 亚洲精品99久久久久久 | 欧美高清成人 | 欧美一级二级在线观看 | 日韩精品1区2区3区 成人黄页在线观看 | 在线观看毛片网站 | 日韩一区二区三区在线 | 亚洲综合视频 | 国产目拍亚洲精品99久久精品 | 欧美在线免费 | 国产精品成人在线观看 | 亚洲精品一区二区三区蜜桃久 | 久久国内精品 | 欧美做暖暖视频 | 精品久久久久久久久久 | 国产欧美日韩视频 | 日韩精品免费视频 | 亚洲欧美日韩中文在线 | 日日摸夜夜添夜夜添精品视频 | 狠狠躁躁夜夜躁波多野结依 | 亚洲国产伊人 | 久久久久国产一区二区三区 | 精品视频一区二区三区在线观看 | 亚洲精品视频在线 | 免费看a| 日韩免费视频一区二区 | 亚洲视频在线看 | 午夜精品视频 | 久久精品一区二区 | 99久久婷婷国产综合精品首页 | 亚洲国产欧美在线人成 |