1# Path
2
3路径绘制组件,根据绘制路径生成封闭的自定义形状。
4
5> **说明:**
6>
7> 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10## 子组件
11
1213
14## 接口
15
16Path(options?: PathOptions)
17
18**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
19
20**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
21
22**系统能力:** SystemCapability.ArkUI.ArkUI.Full
23
24**参数:**
25
26| 参数名                                             | 类型         | 必填 | 说明                   |
27| ------ | ---------------- | ---- | ------------------------------------------------------------ |
28| options  | [PathOptions](ts-drawing-components-path.md#pathoptions14对象说明) | 否   | Path绘制区域。|
29
30## PathOptions<sup>14+</sup>对象说明
31用于描述Path绘制区域。
32
33**卡片能力:** 从API version 14开始,该接口支持在ArkTS卡片中使用。
34
35**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
36
37**系统能力:** SystemCapability.ArkUI.ArkUI.Full
38
39| 名称 | 类型 | 必填 | 说明 |
40| -------- | -------- | -------- | -------- |
41| width | string \| number | 否 | 路径所在矩形的宽度。<br/>值为异常值或缺省时按照自身内容需要的宽度处理。<br/>默认单位:vp |
42| height | string \| number | 否 | 路径所在矩形的高度。<br/>值为异常值或缺省时按照自身内容需要的宽度处理。<br/>默认单位:vp |
43| [commands](ts-drawing-components-path.md#commands) | string  | 否 | 路径绘制的命令字符串。<br/>值为异常值或缺省时按照自身内容需要的宽度处理。默认值:''<br/>异常值按照默认值处理。 |
44
45## 属性
46
47除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
48
49### commands
50
51commands(value: string)
52
53设置路径绘制的命令字符串,单位为px。像素单位转换方法请参考[像素单位转换](ts-pixel-units.md)。
54
55**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
56
57**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
58
59**系统能力:** SystemCapability.ArkUI.ArkUI.Full
60
61**参数:**
62
63| 参数名 | 类型   | 必填 | 说明                          |
64| ------ | ------ | ---- | ----------------------------- |
65| value  | string | 是   | 线条绘制的路径。<br/>默认值:''<br/>默认单位:px |
66
67### fill
68
69fill(value: ResourceColor)
70
71设置填充区域的颜色,异常值按照默认值处理。与通用属性foregroundColor同时设置时,后设置的属性生效。
72
73**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
74
75**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
76
77**系统能力:** SystemCapability.ArkUI.ArkUI.Full
78
79**参数:**
80
81| 参数名 | 类型                                       | 必填 | 说明                                   |
82| ------ | ------------------------------------------ | ---- | -------------------------------------- |
83| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 填充区域颜色。<br/>默认值:Color.Black |
84
85### fillOpacity
86
87fillOpacity(value: number | string | Resource)
88
89设置填充区域透明度。取值范围是[0.0, 1.0],若给定值小于0.0,则取值为0.0;若给定值大于1.0,则取值为1.0,其余异常值按1.0处理。
90
91**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
92
93**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
94
95**系统能力:** SystemCapability.ArkUI.ArkUI.Full
96
97**参数:**
98
99| 参数名 | 类型                                                         | 必填 | 说明                           |
100| ------ | ------------------------------------------------------------ | ---- | ------------------------------ |
101| value  | number&nbsp;\|&nbsp;string&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 是   | 填充区域透明度。<br/>默认值:1 |
102
103### stroke
104
105stroke(value: ResourceColor)
106
107设置边框颜色,不设置时,默认没有边框线条。异常值不会绘制边框线条。
108
109**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
110
111**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
112
113**系统能力:** SystemCapability.ArkUI.ArkUI.Full
114
115**参数:**
116
117| 参数名 | 类型                                       | 必填 | 说明       |
118| ------ | ------------------------------------------ | ---- | ---------- |
119| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 边框颜色。 |
120
121### strokeDashArray
122
123strokeDashArray(value: Array&lt;any&gt;)
124
125设置线条间隙。线段相交时可能会出现重叠现象。异常值按照默认值处理。
126
127**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
128
129**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
130
131**系统能力:** SystemCapability.ArkUI.ArkUI.Full
132
133**参数:**
134
135| 参数名 | 类型             | 必填 | 说明                      |
136| ------ | ---------------- | ---- | ------------------------- |
137| value  | Array&lt;any&gt; | 是   | 线条间隙。<br/>默认值:[]<br/>默认单位:vp |
138
139### strokeDashOffset
140
141strokeDashOffset(value: number | string)
142
143设置线条绘制起点的偏移量。异常值按照默认值处理。
144
145**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
146
147**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
148
149**系统能力:** SystemCapability.ArkUI.ArkUI.Full
150
151**参数:**
152
153| 参数名 | 类型                       | 必填 | 说明                                 |
154| ------ | -------------------------- | ---- | ------------------------------------ |
155| value  | number&nbsp;\|&nbsp;string | 是   | 线条绘制起点的偏移量。<br/>默认值:0<br/>默认单位:vp |
156
157### strokeLineCap
158
159strokeLineCap(value: LineCapStyle)
160
161设置线条端点绘制样式。
162
163**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
164
165**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
166
167**系统能力:** SystemCapability.ArkUI.ArkUI.Full
168
169**参数:**
170
171| 参数名 | 类型                                              | 必填 | 说明                                             |
172| ------ | ------------------------------------------------- | ---- | ------------------------------------------------ |
173| value  | [LineCapStyle](ts-appendix-enums.md#linecapstyle) | 是   | 线条端点绘制样式。<br/>默认值:LineCapStyle.Butt |
174
175### strokeLineJoin
176
177strokeLineJoin(value: LineJoinStyle)
178
179设置线条拐角绘制样式。
180
181**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
182
183**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
184
185**系统能力:** SystemCapability.ArkUI.ArkUI.Full
186
187**参数:**
188
189| 参数名 | 类型                                                | 必填 | 说明                                               |
190| ------ | --------------------------------------------------- | ---- | -------------------------------------------------- |
191| value  | [LineJoinStyle](ts-appendix-enums.md#linejoinstyle) | 是   | 线条拐角绘制样式。<br/>默认值:LineJoinStyle.Miter |
192
193### strokeMiterLimit
194
195strokeMiterLimit(value: number | string)
196
197设置斜接长度与边框宽度比值的极限值。斜接长度表示外边框外边交点到内边交点的距离,边框宽度即strokeWidth属性的值。该属性取值需在strokeLineJoin属性取值LineJoinStyle.Miter时生效。
198
199该属性的合法值范围应当大于等于1.0,当取值范围在[0,1)时按1.0处理,其余异常值按默认值处理。
200
201**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
202
203**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
204
205**系统能力:** SystemCapability.ArkUI.ArkUI.Full
206
207**参数:**
208
209| 参数名 | 类型                       | 必填 | 说明                                           |
210| ------ | -------------------------- | ---- | ---------------------------------------------- |
211| value  | number&nbsp;\|&nbsp;string | 是   | 斜接长度与边框宽度比值的极限值。<br/>默认值:4 |
212
213### strokeOpacity
214
215strokeOpacity(value: number | string | Resource)
216
217设置线条透明度。该属性的取值范围是[0.0, 1.0],若给定值小于0.0,则取值为0.0;若给定值大于1.0,则取值为1.0,其余异常值按1.0处理 。
218
219**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
220
221**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
222
223**系统能力:** SystemCapability.ArkUI.ArkUI.Full
224
225**参数:**
226
227| 参数名 | 类型                                                         | 必填 | 说明                       |
228| ------ | ------------------------------------------------------------ | ---- | -------------------------- |
229| value  | number&nbsp;\|&nbsp;string&nbsp;\|&nbsp;[Resource](ts-types.md#resource) | 是   | 线条透明度。<br/>默认值:1 |
230
231### strokeWidth
232
233strokeWidth(value: Length)
234
235设置线条宽度。该属性若为string类型, 暂不支持百分比,百分比按照1px处理。
236
237**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
238
239**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
240
241**系统能力:** SystemCapability.ArkUI.ArkUI.Full
242
243**参数:**
244
245| 参数名 | 类型                         | 必填 | 说明                     |
246| ------ | ---------------------------- | ---- | ------------------------ |
247| value  | [Length](ts-types.md#length) | 是   | 线条宽度。<br/>默认值:1<br/>默认单位:vp |
248
249### antiAlias
250
251antiAlias(value: boolean)
252
253设置是否开启抗锯齿效果。
254
255**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
256
257**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
258
259**系统能力:** SystemCapability.ArkUI.ArkUI.Full
260
261**参数:**
262
263| 参数名 | 类型    | 必填 | 说明                                  |
264| ------ | ------- | ---- | ------------------------------------- |
265| value  | boolean | 是   | 是否开启抗锯齿效果。<br/>默认值:true |
266
267## Commands
268
269commands支持的绘制命令如下:
270
271| 命令   | 名称                               | 参数                                       | 说明                                       |
272| ---- | -------------------------------- | ---------------------------------------- | ---------------------------------------- |
273| M    | moveto                           | (x y)                                    | 在给定的 (x, y) 坐标处开始一个新的子路径。例如,`M 0 0` 表示将(0, 0)点作为新子路径的起始点。 |
274| L    | lineto                           | (x y)                                    | 从当前点到给定的 (x, y) 坐标画一条线,该坐标成为新的当前点。例如,`L 50 50` 表示绘制当前点到(50, 50)点的直线,并将(50, 50)点作为新子路径的起始点。 |
275| H    | horizontal lineto                | x                                        | 从当前点绘制一条水平线,等效于将y坐标指定为0的L命令。例如,`H 50 ` 表示绘制当前点到(50, 0)点的直线,并将(50, 0)点作为新子路径的起始点。 |
276| V    | vertical lineto                  | y                                        | 从当前点绘制一条垂直线,等效于将x坐标指定为0的L命令。例如,`V 50 ` 表示绘制当前点到(0, 50)点的直线,并将(0, 50)点作为新子路径的起始点。 |
277| C    | curveto                          | (x1 y1 x2 y2 x y)                        | 使用 (x1, y1) 作为曲线起点的控制点, (x2, y2) 作为曲线终点的控制点,从当前点到 (x, y) 绘制三次贝塞尔曲线。例如,`C100 100 250 100 250 200 ` 表示绘制当前点到(250, 200)点的三次贝塞尔曲线,并将(250, 200)点作为新子路径的起始点。 |
278| S    | smooth curveto                   | (x2 y2 x y)                              | (x2, y2) 作为曲线终点的控制点,绘制从当前点到 (x, y) 绘制三次贝塞尔曲线。若前一个命令是C或S,则起点控制点是上一个命令的终点控制点相对于起点的映射。 例如,`C100 100 250 100 250 200 S400 300 400 200`第二段贝塞尔曲线的起点控制点为(250, 300)。如果没有前一个命令或者前一个命令不是 C或S,则第一个控制点与当前点重合。 |
279| Q    | quadratic Belzier curve          | (x1 y1 x y)                              | 使用 (x1, y1) 作为控制点,从当前点到 (x, y) 绘制二次贝塞尔曲线。例如,`Q400 50 600 300 ` 表示绘制当前点到(600, 300)点的二次贝塞尔曲线,并将(600, 300)点作为新子路径的起始点。 |
280| T    | smooth quadratic Belzier curveto | (x y)                                    | 绘制从当前点到 (x, y) 绘制二次贝塞尔曲线。若前一个命令是Q或T,则控制点是上一个命令的终点控制点相对于起点的映射。 例如,`Q400 50 600 300 T1000 300`第二段贝塞尔曲线的控制点为(800, 350)。 如果没有前一个命令或者前一个命令不是 Q或T,则第一个控制点与当前点重合。 |
281| A    | elliptical Arc                   | (rx ry x-axis-rotation large-arc-flag sweep-flag x y) | 从当前点到 (x, y) 绘制一条椭圆弧。椭圆的大小和方向由两个半径 (rx, ry) 和x-axis-rotation定义,指示整个椭圆相对于当前坐标系如何旋转(以度为单位)。 large-arc-flag 和 sweep-flag确定弧的绘制方式。 |
282| Z    | closepath                        | none                                     | 通过将当前路径连接回当前子路径的初始点来关闭当前子路径。             |
283
284例如: commands('M0 20 L50 50 L50 100 Z')定义了一个三角形,起始于位置(0,20),接着绘制点(0,20)到点(50,50)的直线,再绘制点(50,50)到点(50,100)的直线,最后绘制点(50,100)到(0,20)的直线关闭路径,形成封闭三角形。
285
286## 示例
287
288使用commands、fillOpacity、stroke属性分别绘制路径、透明度、边框颜色。
289
290```ts
291// xxx.ets
292@Entry
293@Component
294struct PathExample {
295  build() {
296    Column({ space: 10 }) {
297      Text('Straight line')
298        .fontSize(11)
299        .fontColor(0xCCCCCC)
300        .width('90%')
301      // 绘制一条长600px,宽3vp的直线
302      Path()
303        .width('600px')
304        .height('10px')
305        .commands('M0 0 L600 0')
306        .stroke(Color.Black)
307        .strokeWidth(3)
308
309      Text('Straight line graph')
310        .fontSize(11)
311        .fontColor(0xCCCCCC)
312        .width('90%')
313      // 绘制直线图形
314      Flex({ justifyContent: FlexAlign.SpaceBetween }) {
315        Path()
316          .width('210px')
317          .height('310px')
318          .commands('M100 0 L200 240 L0 240 Z')
319          .fillOpacity(0)
320          .stroke(Color.Black)
321          .strokeWidth(3)
322        Path()
323          .width('210px')
324          .height('310px')
325          .commands('M0 0 H200 V200 H0 Z')
326          .fillOpacity(0)
327          .stroke(Color.Black)
328          .strokeWidth(3)
329        Path()
330          .width('210px')
331          .height('310px')
332          .commands('M100 0 L0 100 L50 200 L150 200 L200 100 Z')
333          .fillOpacity(0)
334          .stroke(Color.Black)
335          .strokeWidth(3)
336      }.width('95%')
337
338      Text('Curve graphics').fontSize(11).fontColor(0xCCCCCC).width('90%')
339      // 绘制弧线图形
340      Flex({ justifyContent: FlexAlign.SpaceBetween }) {
341        Path()
342          .width('250px')
343          .height('310px')
344          .commands("M0 300 S100 0 240 300 Z")
345          .fillOpacity(0)
346          .stroke(Color.Black)
347          .strokeWidth(3)
348        Path()
349          .width('210px')
350          .height('310px')
351          .commands('M0 150 C0 100 140 0 200 150 L100 300 Z')
352          .fillOpacity(0)
353          .stroke(Color.Black)
354          .strokeWidth(3)
355        Path()
356          .width('210px')
357          .height('310px')
358          .commands('M0 100 A30 20 20 0 0 200 100 Z')
359          .fillOpacity(0)
360          .stroke(Color.Black)
361          .strokeWidth(3)
362      }.width('95%')
363    }.width('100%')
364    .margin({ top: 5 })
365  }
366}
367```
368
369![zh-cn_image_0000001219744193](figures/zh-cn_image_0000001219744193.png)