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