1# Path 2 3路径绘制组件,根据绘制路径生成封闭的自定义形状。 4 5> **说明:** 6> 7> 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8 9 10## 子组件 11 12无 13 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 \| string \| [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<any>) 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<any> | 是 | 线条间隙。<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 \| 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 \| 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 \| string \| [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