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