• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Gauge
2
3数据量规图表组件,用于将数据展示为环形图表。
4
5
6>  **说明:**
7>
8>  该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
9
10
11## 子组件
12
13可以包含单个子组件。
14
15> **说明:**
16>
17> 建议使用文本组件构建当前数值文本和辅助文本。
18>
19> 若子组件宽高为百分比形式,则基准范围为以外圆环做为内切圆的矩形。
20
21
22## 接口
23
24Gauge(options:{value: number, min?: number, max?: number})
25
26从API version 9开始,该接口支持在ArkTS卡片中使用。
27
28**参数:**
29
30| 参数名 | 参数类型 | 必填 | 参数描述 |
31| -------- | -------- | -------- | -------- |
32| value | number | 是 | 量规图的当前数据值,即图中指针指向位置。用于组件创建时量规图初始值的预置。<br/>**说明:** <br/>value不在min和max范围内时使用min作为默认值。 |
33| min | number | 否 | 当前数据段最小值。<br/>默认值:0 |
34| max | number | 否 | 当前数据段最大值。<br/>默认值:100<br/>**说明:** <br/>max小于min时使用默认值0和100。<br/>max和min支持负数。 |
35
36## 属性
37
38除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
39
40| 名称 | 参数类型 | 描述 |
41| -------- | -------- | -------- |
42| value | number | 设置量规图的数据值,可用于动态修改量规图的数据值。<br/>默认值:0<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
43| startAngle | number | 设置起始角度位置,时钟0点为0度,顺时针方向为正角度。<br/>默认值:0<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
44| endAngle | number | 设置终止角度位置,时钟0点为0度,顺时针方向为正角度。<br/>默认值:360<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
45| colors | [ResourceColor<sup>11+</sup>](ts-types.md#resourcecolor) \| [LinearGradient<sup>11+</sup>](ts-basic-components-datapanel.md#lineargradient10对象说明) \| Array&lt;[[ResourceColor](ts-types.md#resourcecolor)&nbsp;\|&nbsp;[LinearGradient<sup>11+</sup>](ts-basic-components-datapanel.md#lineargradient10对象说明)&nbsp;\|&nbsp;number]&gt; | 设置量规图的颜色,支持分段颜色设置。<br/>API version 9 默认值:Color.Black<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 <br/>从API version 11开始,该接口使用以下规则:<br/> 参数类型为ResourceColor,则圆环类型为单色环。<br/> 参数类型为LinearGradient,则圆环类型为渐变环。<br/> 参数类型为数组,则圆环类型为分段渐变环。<br/> 分段渐变环最大显示段数为9段,若多于9段,则多于部分不显示。第一个参数为颜色值,若设置为非颜色类型,则置为"0xFFE84026"。第二个参数为颜色所占比重,若设置为负数或是非数值类型,则将比重置为0。<br/>API version 11默认值:<br>若不传颜色,或者数组为空,无法确定圆环类型及颜色,则圆环颜色为"0xFF64BB5C"、"0xFFF7CE00"、"0xFFE84026"的渐变环。<br/>若传入颜色,但颜色值有误,则该颜色为"0xFFE84026"。 |
46| strokeWidth | [Length](ts-types.md#length) | 设置环形量规图的环形厚度。<br/>默认值:4<br/>单位:vp<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**说明:** <br/>设置小于0的值时,按默认值显示。<br/>不支持百分比。 |
47| description<sup>11+</sup> | [CustomBuilder](ts-types.md#custombuilder8) | 设置说明文本。<br/>**说明:** <br/>@Builder中的内容由开发者自定义,建议使用文本或者图片。<br/>若自定义部分的宽高为百分比形式,则基准范围为圆环直径的44.4%*25.4%的矩形(图片为28.6%*28.6%),距离圆环底部0vp,左右居中。<br/>设置null则不显示内容。<br/>不设置则依赖是否设置数据最大最小值。<br/>若设置最大最小值或者只设置其中一个,则显示最大最小值。<br/>若未设置最大最小值,则不显示内容。<br/>最大最小值显示在圆环底部,位置不可移动,若圆环开口角度设置不恰当,存在圆环遮挡文字的情况。 |
48| trackShadow<sup>11+</sup> | [GaugeShadowOptions](#gaugeshadowoptions11对象说明) | 设置阴影样式。<br/>**说明:** <br/>阴影颜色与圆环颜色一致。<br/>设置null为不开启投影。|
49| indicator<sup>11+</sup> | [GaugeIndicatorOptions](#gaugeindicatoroptions11对象说明) | 设置指针样式。<br/>**说明:** <br/>设置null则不显示指针。|
50
51## GaugeShadowOptions<sup>11+</sup>对象说明
52| 名称          | 参数类型 | 必填 | 描述 |
53| ------------- | ------- | ---- | -------- |
54| radius | number \| [Resource](ts-types.md#resource类型) | 否 | 投影模糊半径。 <br/>默认值:20<br/>单位:vp <br/>**说明:** <br/>设置小于等于0的值时,按默认值显示。|
55| offsetX | number \| [Resource](ts-types.md#resource类型) | 否 | X轴的偏移量。 <br/>默认值:5<br/>单位:vp |
56| offsetY | number \| [Resource](ts-types.md#resource类型) | 否 | Y轴的偏移量。 <br/>默认值:5<br/>单位:vp |
57
58## GaugeIndicatorOptions<sup>11+</sup>对象说明
59| 名称          | 参数类型 | 必填 | 描述 |
60| ------------- | ------- | ---- | -------- |
61| icon | [Resource](ts-types.md#resource类型) | 否 | 图标资源路径。<br/>**说明:** <br/>不配置则使用默认的三角形样式指针。<br/>支持使用svg格式的图标,若使用其他格式,则使用默认的三角形样式指针。 |
62| space | [Dimension](ts-types.md#dimension10) | 否 | 指针距离圆环外边的间距。(不支持百分比) <br/>默认值:8<br/>单位:vp <br/>**说明:** <br/> 对于默认的三角形样式指针,间距为黑色三角形到圆环外边的间距。<br/> 若设置值小于0,则使用默认值。<br/>若设置值大于圆环半径,则使用默认值。|
63
64## 示例
65### 示例1
66示例使用当前数值、说明文本、辅助文本。
67```ts
68@Entry
69@Component
70struct Gauge1 {
71  @Builder descriptionBuilder() {
72    Text('说明文本')
73      .maxFontSize('30sp')
74      .minFontSize("10.0vp")
75      .fontColor("#fffa2a2d")
76      .fontWeight(FontWeight.Medium)
77      .width('100%')
78      .height("100%")
79      .textAlign(TextAlign.Center)
80  }
81
82  build() {
83    Column() {
84      Gauge({ value: 50, min: 1, max: 100 }) {
85        Column() {
86          Text('50')
87            .fontWeight(FontWeight.Medium)
88            .width('62%')
89            .fontColor("#ff182431")
90            .maxFontSize("60.0vp")
91            .minFontSize("30.0vp")
92            .textAlign(TextAlign.Center)
93            .margin({ top: '35%' })
94            .textOverflow({ overflow: TextOverflow.Ellipsis })
95            .maxLines(1)
96          Text('辅助文本')
97            .maxFontSize("16.0fp")
98            .minFontSize("10.0vp")
99            .fontColor($r('sys.color.ohos_id_color_text_secondary'))
100            .fontColor($r('sys.color.ohos_id_color_text_secondary'))
101            .fontWeight(FontWeight.Regular)
102            .width('67.4%')
103            .height('9.5%')
104            .textAlign(TextAlign.Center)
105        }.width('100%').height('100%')
106      }
107      .value(50)
108      .startAngle(210)
109      .endAngle(150)
110      .colors([[new LinearGradient([{ color: "#deb6fb", offset: 0 }, { color: "#ac49f5", offset: 1 }]), 9],
111        [new LinearGradient([{ color: "#bbb7fc", offset: 0 }, { color: "#564af7", offset: 1 }]), 8],
112        [new LinearGradient([{ color: "#f5b5c2", offset: 0 }, { color: "#e64566", offset: 1 }]), 7],
113        [new LinearGradient([{ color: "#f8c5a6", offset: 0 }, { color: "#ed6f21", offset: 1 }]), 6],
114        [new LinearGradient([{ color: "#fceb99", offset: 0 }, { color: "#f7ce00", offset: 1 }]), 5],
115        [new LinearGradient([{ color: "#dbefa5", offset: 0 }, { color: "#a5d61d", offset: 1 }]), 4],
116        [new LinearGradient([{ color: "#c1e4be", offset: 0 }, { color: "#64bb5c", offset: 1 }]), 3],
117        [new LinearGradient([{ color: "#c0ece5", offset: 0 }, { color: "#61cfbe", offset: 1 }]), 2],
118        [new LinearGradient([{ color: "#b5e0f4", offset: 0 }, { color: "#46b1e3", offset: 1 }]), 1]])
119      .width('80%')
120      .height('80%')
121      .strokeWidth(18)
122      .trackShadow({ radius: 7, offsetX: 7, offsetY: 7 })
123      .description(this.descriptionBuilder)
124      .padding(18)
125    }.margin({ top: 40 }).width('100%').height('100%')
126  }
127}
128```
129![gauge](figures/gauge-image1.png)
130
131### 示例2
132示例使用当前数值、图标。
133```ts
134@Entry
135@Component
136struct Gauge2 {
137  @Builder descriptionBuilderImage() {
138    Image($r('sys.media.ohos_ic_public_clock')).width(72).height(72)
139  }
140
141  build() {
142    Column() {
143      Gauge({ value: 50, min: 1, max: 100 }) {
144        Column() {
145          Text('50')
146            .fontWeight(FontWeight.Medium)
147            .width('62%')
148            .fontColor("#ff182431")
149            .maxFontSize("60.0vp")
150            .minFontSize("30.0vp")
151            .textAlign(TextAlign.Center)
152            .margin({ top: '35%' })
153            .textOverflow({ overflow: TextOverflow.Ellipsis })
154            .maxLines(1)
155        }.width('100%').height('100%')
156      }
157      .startAngle(210)
158      .endAngle(150)
159      .colors('#cca5d61d')
160      .width('80%')
161      .height('80%')
162      .strokeWidth(18)
163      .description(this.descriptionBuilderImage)
164      .padding(18)
165    }.margin({ top: 40 }).width('100%').height('100%')
166  }
167}
168```
169![gauge](figures/gauge-image2.png)
170
171### 示例3
172示例使用当前数值、说明文本。
173```ts
174@Entry
175@Component
176struct Gauge3 {
177  @Builder descriptionBuilder() {
178    Text('说明文本')
179      .maxFontSize('30sp')
180      .minFontSize("10.0vp")
181      .fontColor("#fffa2a2d")
182      .fontWeight(FontWeight.Medium)
183      .width('100%')
184      .height("100%")
185      .textAlign(TextAlign.Center)
186  }
187
188  build() {
189    Column() {
190      Column() {
191        Gauge({ value: 50, min: 1, max: 100 }) {
192          Column() {
193            Text('50')
194              .fontWeight(FontWeight.Medium)
195              .width('62%')
196              .fontColor("#ff182431")
197              .maxFontSize("60.0vp")
198              .minFontSize("30.0vp")
199              .textAlign(TextAlign.Center)
200              .margin({ top: '35%' })
201              .textOverflow({ overflow: TextOverflow.Ellipsis })
202              .maxLines(1)
203          }.width('100%').height('100%')
204        }
205        .startAngle(210)
206        .endAngle(150)
207        .colors([[new LinearGradient([{ color: "#deb6fb", offset: 0 }, { color: "#ac49f5", offset: 1 }]), 9],
208          [new LinearGradient([{ color: "#bbb7fc", offset: 0 }, { color: "#564af7", offset: 1 }]), 8],
209          [new LinearGradient([{ color: "#f5b5c2", offset: 0 }, { color: "#e64566", offset: 1 }]), 7],
210          [new LinearGradient([{ color: "#f8c5a6", offset: 0 }, { color: "#ed6f21", offset: 1 }]), 6],
211          [new LinearGradient([{ color: "#fceb99", offset: 0 }, { color: "#f7ce00", offset: 1 }]), 5],
212          [new LinearGradient([{ color: "#dbefa5", offset: 0 }, { color: "#a5d61d", offset: 1 }]), 4],
213          [new LinearGradient([{ color: "#c1e4be", offset: 0 }, { color: "#64bb5c", offset: 1 }]), 3],
214          [new LinearGradient([{ color: "#c0ece5", offset: 0 }, { color: "#61cfbe", offset: 1 }]), 2],
215          [new LinearGradient([{ color: "#b5e0f4", offset: 0 }, { color: "#46b1e3", offset: 1 }]), 1]])
216        .width('80%')
217        .height('80%')
218        .strokeWidth(18)
219        .description(this.descriptionBuilder)
220        .trackShadow({ radius: 7, offsetX: 7, offsetY: 7 })
221        .padding(18)
222      }.margin({ top: 40 }).width('100%').height('100%')
223    }
224  }
225}
226```
227![gauge](figures/gauge-image3.png)
228
229### 示例4
230示例使用当前数值、辅助文本。
231```ts
232@Entry
233@Component
234struct Gauge4 {
235  build() {
236    Column() {
237      Gauge({ value: 50, min: 1, max: 100 }) {
238        Column() {
239          Text('50')
240            .maxFontSize("72.0vp")
241            .minFontSize("10.0vp")
242            .fontColor("#ff182431")
243            .width('40%')
244            .textAlign(TextAlign.Center)
245            .margin({ top: '35%' })
246            .textOverflow({ overflow: TextOverflow.Ellipsis })
247            .maxLines(1)
248          Text('辅助文本')
249            .maxFontSize("30.0vp")
250            .minFontSize("18.0vp")
251            .fontWeight(FontWeight.Medium)
252            .fontColor($r('sys.color.ohos_id_color_text_secondary'))
253            .width('62%')
254            .height('15.9%')
255            .textAlign(TextAlign.Center)
256        }.width('100%').height('100%')
257      }
258      .startAngle(210)
259      .endAngle(150)
260      .colors([[new LinearGradient([{ color: "#deb6fb", offset: 0 }, { color: "#ac49f5", offset: 1 }]), 9],
261        [new LinearGradient([{ color: "#bbb7fc", offset: 0 }, { color: "#564af7", offset: 1 }]), 8],
262        [new LinearGradient([{ color: "#f5b5c2", offset: 0 }, { color: "#e64566", offset: 1 }]), 7],
263        [new LinearGradient([{ color: "#f8c5a6", offset: 0 }, { color: "#ed6f21", offset: 1 }]), 6],
264        [new LinearGradient([{ color: "#fceb99", offset: 0 }, { color: "#f7ce00", offset: 1 }]), 5],
265        [new LinearGradient([{ color: "#dbefa5", offset: 0 }, { color: "#a5d61d", offset: 1 }]), 4],
266        [new LinearGradient([{ color: "#c1e4be", offset: 0 }, { color: "#64bb5c", offset: 1 }]), 3],
267        [new LinearGradient([{ color: "#c0ece5", offset: 0 }, { color: "#61cfbe", offset: 1 }]), 2],
268        [new LinearGradient([{ color: "#b5e0f4", offset: 0 }, { color: "#46b1e3", offset: 1 }]), 1]])
269      .width('80%')
270      .height('80%')
271      .strokeWidth(18)
272      .description(null)
273      .trackShadow({ radius: 7, offsetX: 7, offsetY: 7 })
274      .padding(18)
275    }.margin({ top: 40 }).width('100%').height('100%')
276  }
277}
278```
279![gauge](figures/gauge-image4.png)
280
281### 示例5
282示例使用当前数值、最大最小数值。
283```ts
284@Entry
285@Component
286struct Gauge5 {
287  build() {
288    Column() {
289      Gauge({ value: 50, min: 1, max: 100 }) {
290        Column() {
291          Text('50')
292            .maxFontSize("80sp")
293            .minFontSize("60.0vp")
294            .fontWeight(FontWeight.Medium)
295            .fontColor("#ff182431")
296            .width('40%')
297            .height('30%')
298            .textAlign(TextAlign.Center)
299            .margin({ top: '22.2%' })
300            .textOverflow({ overflow: TextOverflow.Ellipsis })
301            .maxLines(1)
302        }.width('100%').height('100%')
303      }
304      .startAngle(225)
305      .endAngle(135)
306      .colors(new LinearGradient([{ color: "#e84026", offset: 0 },
307        { color: "#f7ce00", offset: 0.6 },
308        { color: "#64bb5c", offset: 1 }]))
309      .width('80%')
310      .height('80%')
311      .strokeWidth(18)
312      .trackShadow({ radius: 7, offsetX: 7, offsetY: 7 })
313      .padding(18)
314    }.margin({ top: 40 }).width('100%').height('100%')
315  }
316}
317```
318![gauge](figures/gauge-image5.png)
319
320### 示例6
321示例使用当前数值、最大最小数值、辅助文本。
322```ts
323@Entry
324@Component
325struct Gauge6 {
326  build() {
327    Column() {
328      Gauge({ value: 50, min: 1, max: 100 }) {
329        Column() {
330          Text('50')
331            .maxFontSize('60sp')
332            .minFontSize('30.0vp')
333            .fontWeight(FontWeight.Medium)
334            .fontColor("#ff182431")
335            .width('62%')
336            .textAlign(TextAlign.Center)
337            .margin({ top: '35%' })
338            .textOverflow({ overflow: TextOverflow.Ellipsis })
339            .maxLines(1)
340          Text('辅助文本')
341            .maxFontSize('16sp')
342            .minFontSize("10.0vp")
343            .fontColor($r('sys.color.ohos_id_color_text_secondary'))
344            .fontWeight(FontWeight.Regular)
345            .width('67.4%')
346            .height('9.5%')
347            .textAlign(TextAlign.Center)
348        }.width('100%').height('100%')
349      }
350      .startAngle(225)
351      .endAngle(135)
352      .colors(Color.Red)
353      .width('80%')
354      .height('80%')
355      .indicator(null)
356      .strokeWidth(18)
357      .trackShadow({ radius: 7, offsetX: 7, offsetY: 7 })
358      .padding(18)
359    }.margin({ top: 40 }).width('100%').height('100%')
360  }
361}
362```
363![gauge](figures/gauge-image6.png)
364
365### 示例7
366示例使用当前数值、最大最小数值。
367```ts
368@Entry
369@Component
370struct Gauge7 {
371  build() {
372    Column() {
373      Gauge({ value: 50, min: 1, max: 100 }) {
374        Column() {
375          Text('50')
376            .maxFontSize('60sp')
377            .minFontSize('30.0vp')
378            .fontWeight(FontWeight.Medium)
379            .fontColor("#ff182431")
380            .width('62%')
381            .textAlign(TextAlign.Center)
382            .margin({ top: '35%' })
383            .textOverflow({ overflow: TextOverflow.Ellipsis })
384            .maxLines(1)
385        }.width('100%').height('100%')
386      }
387      .startAngle(225)
388      .endAngle(135)
389      .colors(Color.Red)
390      .width('80%')
391      .height('80%')
392      .indicator(null)
393      .strokeWidth(18)
394      .trackShadow({ radius: 7, offsetX: 7, offsetY: 7 })
395      .padding(18)
396    }.margin({ top: 40 }).width('100%').height('100%')
397  }
398}
399```
400![gauge](figures/gauge-image7.png)