1# Path2D对象 2 3路径对象,支持通过对象的接口进行路径的描述,并通过Canvas的stroke接口或者fill接口进行绘制。 4 5> **说明:** 6> 7> 从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8 9 10 11## addPath 12 13addPath(path: path2D, transform?:Matrix2D): void 14 15将另一个路径添加到当前的路径对象中。 16 17从API version 9开始,该接口支持在ArkTS卡片中使用。 18 19**参数:** 20 21 | 参数 | 类型 | 必填 | 默认值 | 描述 | 22 | -------- | -------- | -------- | -------- | -------- | 23 | path | path2D | 是 | - | 需要添加到当前路径的路径对象。| 24 | transform | Matrix2D | 否 | null | 新增路径的变换矩阵对象。 | 25 26 27**示例:** 28 29 ```ts 30 // xxx.ets 31 @Entry 32 @Component 33 struct AddPath { 34 private settings: RenderingContextSettings = new RenderingContextSettings(true) 35 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 36 37 private path2Da: Path2D = new Path2D("M250 150 L150 350 L350 350 Z") 38 private path2Db: Path2D = new Path2D() 39 40 build() { 41 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 42 Canvas(this.context) 43 .width('100%') 44 .height('100%') 45 .backgroundColor('#ffff00') 46 .onReady(() =>{ 47 this.path2Db.addPath(this.path2Da) 48 this.context.stroke(this.path2Db) 49 }) 50 } 51 .width('100%') 52 .height('100%') 53 } 54 } 55 ``` 56 57 ![zh-cn_image_0000001238712467](figures/zh-cn_image_0000001238712467.png) 58 59 60## closePath 61 62closePath(): void 63 64将路径的当前点移回到路径的起点,当前点到起点间画一条直线。如果形状已经闭合或只有一个点,则此功能不执行任何操作。 65 66从API version 9开始,该接口支持在ArkTS卡片中使用。 67 68**示例:** 69 70 ```ts 71 // xxx.ets 72 @Entry 73 @Component 74 struct ClosePath { 75 private settings: RenderingContextSettings = new RenderingContextSettings(true) 76 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 77 private path2Db: Path2D = new Path2D() 78 79 build() { 80 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 81 Canvas(this.context) 82 .width('100%') 83 .height('100%') 84 .backgroundColor('#ffff00') 85 .onReady(() =>{ 86 this.path2Db.moveTo(200, 100) 87 this.path2Db.lineTo(300, 100) 88 this.path2Db.lineTo(200, 200) 89 this.path2Db.closePath() 90 this.context.stroke(this.path2Db) 91 }) 92 } 93 .width('100%') 94 .height('100%') 95 } 96 } 97 ``` 98 99 ![zh-cn_image_0000001193872542](figures/zh-cn_image_0000001193872542.png) 100 101 102## moveTo 103 104moveTo(x: number, y: number): void 105 106将路径的当前坐标点移动到目标点,移动过程中不绘制线条。 107 108从API version 9开始,该接口支持在ArkTS卡片中使用。 109 110**参数:** 111 112 | 参数 | 类型 | 必填 | 默认值 | 描述 | 113 | -------- | -------- | -------- | -------- | -------- | 114 | x | number | 是 | 0 | 目标点X轴坐标。 | 115 | y | number | 是 | 0 | 目标点Y轴坐标。 | 116 117**示例:** 118 119 ```ts 120 // xxx.ets 121 @Entry 122 @Component 123 struct MoveTo { 124 private settings: RenderingContextSettings = new RenderingContextSettings(true) 125 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 126 private path2Db: Path2D = new Path2D() 127 128 build() { 129 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 130 Canvas(this.context) 131 .width('100%') 132 .height('100%') 133 .backgroundColor('#ffff00') 134 .onReady(() =>{ 135 this.path2Db.moveTo(50, 100) 136 this.path2Db.lineTo(250, 100) 137 this.path2Db.lineTo(150, 200) 138 this.path2Db.closePath() 139 this.context.stroke(this.path2Db) 140 }) 141 } 142 .width('100%') 143 .height('100%') 144 } 145 } 146 ``` 147 148 ![zh-cn_image_0000001194032502](figures/zh-cn_image_0000001194032502.png) 149 150 151## lineTo 152 153lineTo(x: number, y: number): void 154 155从当前点绘制一条直线到目标点。 156 157从API version 9开始,该接口支持在ArkTS卡片中使用。 158 159**参数:** 160 161 | 参数 | 类型 | 必填 | 默认值 | 描述 | 162 | -------- | -------- | -------- | -------- | -------- | 163 | x | number | 是 | 0 | 目标点X轴坐标。 | 164 | y | number | 是 | 0 | 目标点Y轴坐标。 | 165 166**示例:** 167 168 ```ts 169 // xxx.ets 170 @Entry 171 @Component 172 struct LineTo { 173 private settings: RenderingContextSettings = new RenderingContextSettings(true) 174 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 175 private path2Db: Path2D = new Path2D() 176 177 build() { 178 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 179 Canvas(this.context) 180 .width('100%') 181 .height('100%') 182 .backgroundColor('#ffff00') 183 .onReady(() =>{ 184 this.path2Db.moveTo(100, 100) 185 this.path2Db.lineTo(100, 200) 186 this.path2Db.lineTo(200, 200) 187 this.path2Db.lineTo(200, 100) 188 this.path2Db.closePath() 189 this.context.stroke(this.path2Db) 190 }) 191 } 192 .width('100%') 193 .height('100%') 194 } 195 } 196 ``` 197 198 ![zh-cn_image_0000001238832437](figures/zh-cn_image_0000001238832437.png) 199 200 201## bezierCurveTo 202 203bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void 204 205创建三次贝赛尔曲线的路径。 206 207从API version 9开始,该接口支持在ArkTS卡片中使用。 208 209**参数:** 210 211 | 参数 | 类型 | 必填 | 默认值 | 描述 | 212 | -------- | -------- | -------- | -------- | -------- | 213 | cp1x | number | 是 | 0 | 第一个贝塞尔参数的x坐标值。 | 214 | cp1y | number | 是 | 0 | 第一个贝塞尔参数的y坐标值。 | 215 | cp2x | number | 是 | 0 | 第二个贝塞尔参数的x坐标值。 | 216 | cp2y | number | 是 | 0 | 第二个贝塞尔参数的y坐标值。 | 217 | x | number | 是 | 0 | 路径结束时的x坐标值。 | 218 | y | number | 是 | 0 | 路径结束时的y坐标值。 | 219 220**示例:** 221 222 ```ts 223 // xxx.ets 224 @Entry 225 @Component 226 struct BezierCurveTo { 227 private settings: RenderingContextSettings = new RenderingContextSettings(true) 228 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 229 private path2Db: Path2D = new Path2D() 230 231 build() { 232 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 233 Canvas(this.context) 234 .width('100%') 235 .height('100%') 236 .backgroundColor('#ffff00') 237 .onReady(() =>{ 238 this.path2Db.moveTo(10, 10) 239 this.path2Db.bezierCurveTo(20, 100, 200, 100, 200, 20) 240 this.context.stroke(this.path2Db) 241 }) 242 } 243 .width('100%') 244 .height('100%') 245 } 246 } 247 ``` 248 249 ![zh-cn_image_0000001239032455](figures/zh-cn_image_0000001239032455.png) 250 251 252## quadraticCurveTo 253 254quadraticCurveTo(cpx: number, cpy: number, x: number ,y: number): void 255 256创建二次贝赛尔曲线的路径。 257 258从API version 9开始,该接口支持在ArkTS卡片中使用。 259 260**参数:** 261 262 | 参数 | 类型 | 必填 | 默认值 | 描述 | 263 | -------- | -------- | -------- | -------- | -------- | 264 | cpx | number | 是 | 0 | 贝塞尔参数的x坐标值。 | 265 | cpy | number | 是 | 0 | 贝塞尔参数的y坐标值。 | 266 | x | number | 是 | 0 | 路径结束时的x坐标值。 | 267 | y | number | 是 | 0 | 路径结束时的y坐标值。 | 268 269**示例:** 270 271 ```ts 272 // xxx.ets 273 @Entry 274 @Component 275 struct QuadraticCurveTo { 276 private settings: RenderingContextSettings = new RenderingContextSettings(true) 277 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 278 private path2Db: Path2D = new Path2D() 279 280 build() { 281 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 282 Canvas(this.context) 283 .width('100%') 284 .height('100%') 285 .backgroundColor('#ffff00') 286 .onReady(() =>{ 287 this.path2Db.moveTo(10, 10) 288 this.path2Db.quadraticCurveTo(100, 100, 200, 20) 289 this.context.stroke(this.path2Db) 290 }) 291 } 292 .width('100%') 293 .height('100%') 294 } 295 } 296 ``` 297 298 ![zh-cn_image_0000001238952419](figures/zh-cn_image_0000001238952419.png) 299 300 301## arc 302 303arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void 304 305绘制弧线路径。 306 307从API version 9开始,该接口支持在ArkTS卡片中使用。 308 309**参数:** 310 311 | 参数 | 类型 | 必填 | 默认值 | 描述 | 312 | -------- | -------- | -------- | -------- | -------- | 313 | x | number | 是 | 0 | 弧线圆心的x坐标值。 | 314 | y | number | 是 | 0 | 弧线圆心的y坐标值。 | 315 | radius | number | 是 | 0 | 弧线的圆半径。 | 316 | startAngle | number | 是 | 0 | 弧线的起始弧度。 | 317 | endAngle | number | 是 | 0 | 弧线的终止弧度。 | 318 | counterclockwise | boolean | 否 | false | 是否逆时针绘制圆弧。 | 319 320**示例:** 321 322 ```ts 323 // xxx.ets 324 @Entry 325 @Component 326 struct Arc { 327 private settings: RenderingContextSettings = new RenderingContextSettings(true) 328 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 329 private path2Db: Path2D = new Path2D() 330 331 build() { 332 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 333 Canvas(this.context) 334 .width('100%') 335 .height('100%') 336 .backgroundColor('#ffff00') 337 .onReady(() =>{ 338 this.path2Db.arc(100, 75, 50, 0, 6.28) 339 this.context.stroke(this.path2Db) 340 }) 341 } 342 .width('100%') 343 .height('100%') 344 } 345 } 346 ``` 347 348 ![zh-cn_image_0000001194192488](figures/zh-cn_image_0000001194192488.png) 349 350 351## arcTo 352 353arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void 354 355依据圆弧经过的点和圆弧半径创建圆弧路径。 356 357从API version 9开始,该接口支持在ArkTS卡片中使用。 358 359**参数:** 360 361 | 参数 | 类型 | 必填 | 默认值 | 描述 | 362 | -------- | -------- | -------- | -------- | -------- | 363 | x1 | number | 是 | 0 | 圆弧经过的第一个点的x坐标值。 | 364 | y1 | number | 是 | 0 | 圆弧经过的第一个点的y坐标值。 | 365 | x2 | number | 是 | 0 | 圆弧经过的第二个点的x坐标值。 | 366 | y2 | number | 是 | 0 | 圆弧经过的第二个点的y坐标值。 | 367 | radius | number | 是 | 0 | 圆弧的圆半径值。 | 368 369**示例:** 370 371 ```ts 372 // xxx.ets 373 @Entry 374 @Component 375 struct ArcTo { 376 private settings: RenderingContextSettings = new RenderingContextSettings(true) 377 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 378 private path2Db: Path2D = new Path2D() 379 380 build() { 381 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 382 Canvas(this.context) 383 .width('100%') 384 .height('100%') 385 .backgroundColor('#ffff00') 386 .onReady(() =>{ 387 this.path2Db.arcTo(150, 20, 150, 70, 50) 388 this.context.stroke(this.path2Db) 389 }) 390 } 391 .width('100%') 392 .height('100%') 393 } 394 } 395 ``` 396 397 ![zh-cn_image_0000001194352486](figures/zh-cn_image_0000001194352486.png) 398 399 400## ellipse 401 402ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void 403 404在规定的矩形区域绘制一个椭圆。 405 406从API version 9开始,该接口支持在ArkTS卡片中使用。 407 408**参数:** 409 410 | 参数 | 类型 | 必填 | 默认值 | 描述 | 411 | -------- | -------- | -------- | -------- | -------- | 412 | x | number | 是 | 0 | 椭圆圆心的x轴坐标。 | 413 | y | number | 是 | 0 | 椭圆圆心的y轴坐标。 | 414 | radiusX | number | 是 | 0 | 椭圆x轴的半径长度。 | 415 | radiusY | number | 是 | 0 | 椭圆y轴的半径长度。 | 416 | rotation | number | 是 | 0 | 椭圆的旋转角度,单位为弧度。 | 417 | startAngle | number | 是 | 0 | 椭圆绘制的起始点角度,以弧度表示。 | 418 | endAngle | number | 是 | 0 | 椭圆绘制的结束点角度,以弧度表示。 | 419 | counterclockwise | boolean | 否 | false | 是否以逆时针方向绘制椭圆。<br>true:逆时针方向绘制椭圆。<br>false:顺时针方向绘制椭圆。 | 420 421**示例:** 422 423 ```ts 424 // xxx.ets 425 @Entry 426 @Component 427 struct CanvasExample { 428 private settings: RenderingContextSettings = new RenderingContextSettings(true) 429 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 430 private path2Db: Path2D = new Path2D() 431 432 build() { 433 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 434 Canvas(this.context) 435 .width('100%') 436 .height('100%') 437 .backgroundColor('#ffff00') 438 .onReady(() =>{ 439 this.path2Db.ellipse(200, 200, 50, 100, 0, Math.PI * 1, Math.PI*2) 440 this.context.stroke(this.path2Db) 441 }) 442 } 443 .width('100%') 444 .height('100%') 445 } 446 } 447 ``` 448 449 ![zh-cn_image_0000001238712471](figures/zh-cn_image_0000001238712471.png) 450 451 452## rect 453 454rect(x: number, y: number, w: number, h: number): void 455 456创建矩形路径。 457 458从API version 9开始,该接口支持在ArkTS卡片中使用。 459 460**参数:** 461 462 | 参数 | 类型 | 必填 | 默认值 | 描述 | 463 | -------- | -------- | -------- | -------- | -------- | 464 | x | number | 是 | 0 | 指定矩形的左上角x坐标值。 | 465 | y | number | 是 | 0 | 指定矩形的左上角y坐标值。 | 466 | w | number | 是 | 0 | 指定矩形的宽度。 | 467 | h | number | 是 | 0 | 指定矩形的高度。 | 468 469**示例:** 470 471 ```ts 472 // xxx.ets 473 @Entry 474 @Component 475 struct CanvasExample { 476 private settings: RenderingContextSettings = new RenderingContextSettings(true) 477 private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings) 478 private path2Db: Path2D = new Path2D() 479 480 build() { 481 Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { 482 Canvas(this.context) 483 .width('100%') 484 .height('100%') 485 .backgroundColor('#ffff00') 486 .onReady(() =>{ 487 this.path2Db.rect(20, 20, 100, 100); 488 this.context.stroke(this.path2Db) 489 }) 490 } 491 .width('100%') 492 .height('100%') 493 } 494 } 495 ``` 496 497 ![zh-cn_image_0000001193872544](figures/zh-cn_image_0000001193872544.png) 498