• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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