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