• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Path2D
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @sd-wu-->
5<!--Designer: @sunbees-->
6<!--Tester: @liuli0427-->
7<!--Adviser: @HelloCrease-->
8
9路径对象,支持通过对象的接口进行路径的描述,并通过Canvas的stroke接口或者fill接口进行绘制。
10
11>  **说明:**
12>
13>  从 API version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14>
15>  Path2D对象不支持重置已设置的路径,如需新路径可重新创建一个空的Path2D对象。
16>
17>  Path2D对象的方法无法对[CanvasRenderingContext2D](./ts-canvasrenderingcontext2d.md)和[OffscreenCanvasRenderingContext2D](./ts-offscreencanvasrenderingcontext2d.md)对象中设置的路径生效。
18
19## 构造函数
20
21### constructor
22
23constructor()
24
25构造一个空的Path2D对象。
26
27**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
28
29**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
30
31**系统能力:** SystemCapability.ArkUI.ArkUI.Full
32
33### constructor<sup>12+</sup>
34
35constructor(unit: LengthMetricsUnit)
36
37构造一个空的Path2D对象,支持配置Path2D对象的单位模式。
38
39**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
40
41**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
42
43**系统能力:** SystemCapability.ArkUI.ArkUI.Full
44
45**参数:**
46
47| 参数名  | 类型     | 必填 |  说明   |
48| ----- | -------- | ---- | ---------- |
49| unit  | [LengthMetricsUnit](../js-apis-arkui-graphics.md#lengthmetricsunit12) | 是 | 用来配置Path2D对象的单位模式,配置后无法动态更改,配置方法同[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)。<br>默认值:DEFAULT|
50
51### constructor
52
53constructor(path: Path2D)
54
55使用路径对象构造Path2D对象。
56
57**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
58
59**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
60
61**系统能力:** SystemCapability.ArkUI.ArkUI.Full
62
63**参数:**
64
65| 参数名  | 类型     | 必填 |  说明   |
66| ----- | -------- | ---- | ---------- |
67| path | Path2D | 是 | 路径对象。 |
68
69### constructor<sup>12+</sup>
70
71constructor(path: Path2D, unit: LengthMetricsUnit)
72
73使用路径对象构造Path2D对象,支持配置Path2D对象的单位模式。
74
75**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
76
77**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
78
79**系统能力:** SystemCapability.ArkUI.ArkUI.Full
80
81**参数:**
82
83| 参数名  | 类型     | 必填 |  说明   |
84| ----- | -------- | ---- | ---------- |
85| path | Path2D | 是 | 路径对象。 |
86| unit | [LengthMetricsUnit](../js-apis-arkui-graphics.md#lengthmetricsunit12) | 是 | 用来配置Path2D对象的单位模式,配置后无法动态更改,配置方法同[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)。<br>默认值:DEFAULT|
87
88### constructor
89
90constructor(d: string)
91
92使用符合SVG路径描述规范的路径字符串构造Path2D对象。
93
94**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
95
96**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
97
98**系统能力:** SystemCapability.ArkUI.ArkUI.Full
99
100**参数:**
101
102| 参数名  | 类型     | 必填 |  说明   |
103| ----- | -------- | ---- | ---------- |
104| d | string | 是 | 符合SVG路径描述规范的路径字符串,格式参考[SVG路径描述规范](ts-drawing-components-path.md#svg路径描述规范)。 |
105
106### constructor<sup>12+</sup>
107
108constructor(description: string, unit: LengthMetricsUnit)
109
110使用符合SVG路径描述规范的路径字符串构造Path2D对象,支持配置Path2D对象的单位模式。
111
112**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
113
114**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
115
116**系统能力:** SystemCapability.ArkUI.ArkUI.Full
117
118**参数:**
119
120| 参数名  | 类型     | 必填 |  说明   |
121| ----- | -------- | ---- | ---------- |
122| description | string | 是 | 符合SVG路径描述规范的路径字符串,格式参考[SVG路径描述规范](ts-drawing-components-path.md#svg路径描述规范)。 |
123| unit | [LengthMetricsUnit](../js-apis-arkui-graphics.md#lengthmetricsunit12) | 是 | 用来配置Path2D对象的单位模式,配置后无法动态更改,配置方法同[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)。<br>默认值:DEFAULT|
124
125## 方法
126
127### addPath
128
129addPath(path: Path2D, transform?: Matrix2D): void
130
131将另一个路径添加到当前的路径对象中。
132
133**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
134
135**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
136
137**系统能力:** SystemCapability.ArkUI.ArkUI.Full
138
139**参数:**
140
141| 参数名  | 类型     | 必填 |  说明   |
142| ----- | -------- | ---- | ---------- |
143| path      | Path2D | 是 | 需要添加到当前路径的路径对象,路径单位:px。 |
144| transform | [Matrix2D](ts-components-canvas-matrix2d.md) | 否 | 新增路径的变换矩阵对象。<br>默认值:null |
145
146
147**示例:**
148
149  ```ts
150  // xxx.ets
151  @Entry
152  @Component
153  struct AddPath {
154    private settings: RenderingContextSettings = new RenderingContextSettings(true);
155    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
156    private path2Da: Path2D = new Path2D("M250 150 L150 350 L350 350 Z");
157    private path2Db: Path2D = new Path2D();
158
159    build() {
160      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
161        Canvas(this.context)
162          .width('100%')
163          .height('100%')
164          .backgroundColor('#ffff00')
165          .onReady(() => {
166            this.path2Db.addPath(this.path2Da)
167            this.context.stroke(this.path2Db)
168          })
169      }
170      .width('100%')
171      .height('100%')
172    }
173  }
174  ```
175
176  ![zh-cn_image_0000001238712467](figures/zh-cn_image_0000001238712467.png)
177
178
179### closePath
180
181closePath(): void
182
183将路径的当前点移回到路径的起点,当前点到起点间画一条直线。如果形状已经闭合或只有一个点,则此功能不执行任何操作。
184
185**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
186
187**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
188
189**系统能力:** SystemCapability.ArkUI.ArkUI.Full
190
191**示例:**
192
193  ```ts
194  // xxx.ets
195  @Entry
196  @Component
197  struct ClosePath {
198    private settings: RenderingContextSettings = new RenderingContextSettings(true);
199    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
200    private path2Db: Path2D = new Path2D();
201
202    build() {
203      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
204        Canvas(this.context)
205          .width('100%')
206          .height('100%')
207          .backgroundColor('#ffff00')
208          .onReady(() => {
209            this.path2Db.moveTo(200, 100)
210            this.path2Db.lineTo(300, 100)
211            this.path2Db.lineTo(200, 200)
212            this.path2Db.closePath()
213            this.context.stroke(this.path2Db)
214          })
215      }
216      .width('100%')
217      .height('100%')
218    }
219  }
220  ```
221
222  ![zh-cn_image_0000001193872542](figures/zh-cn_image_0000001193872542.png)
223
224
225### moveTo
226
227moveTo(x: number, y: number): void
228
229将路径的当前坐标点移动到目标点,移动过程中不绘制线条。
230
231**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
232
233**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
234
235**系统能力:** SystemCapability.ArkUI.ArkUI.Full
236
237**参数:**
238
239| 参数   | 类型     | 必填 | 描述       |
240| ---- | ------ | ---- | -------- |
241| x    | number | 是 | 目标点X轴坐标。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
242| y    | number | 是 | 目标点Y轴坐标。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
243
244> **说明:**
245>
246> API version 18之前,若未执行moveTo接口或moveTo接口传入无效参数,路径以(0,0)为起点。
247>
248> API version 18及以后,若未执行moveTo接口或moveTo接口传入无效参数,路径以初次调用的lineTo、arcTo、bezierCurveTo或quadraticCurveTo接口中的起始点为起点。
249
250**示例:**
251
252  ```ts
253  // xxx.ets
254  @Entry
255  @Component
256  struct MoveTo {
257    private settings: RenderingContextSettings = new RenderingContextSettings(true);
258    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
259    private path2Db: Path2D = new Path2D();
260
261    build() {
262      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
263        Canvas(this.context)
264          .width('100%')
265          .height('100%')
266          .backgroundColor('#ffff00')
267          .onReady(() => {
268            this.path2Db.moveTo(50, 100)
269            this.path2Db.lineTo(250, 100)
270            this.path2Db.lineTo(150, 200)
271            this.path2Db.closePath()
272            this.context.stroke(this.path2Db)
273          })
274      }
275      .width('100%')
276      .height('100%')
277    }
278  }
279  ```
280
281  ![zh-cn_image_0000001194032502](figures/zh-cn_image_0000001194032502.png)
282
283
284### lineTo
285
286lineTo(x: number, y: number): void
287
288从当前点绘制一条直线到目标点。
289
290**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
291
292**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
293
294**系统能力:** SystemCapability.ArkUI.ArkUI.Full
295
296**参数:**
297
298| 参数名  | 类型     | 必填 |  说明   |
299| ----- | -------- | ---- | ---------- |
300| x    | number | 是 | 目标点X轴坐标。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
301| y    | number | 是 | 目标点Y轴坐标。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
302
303**示例:**
304
305  ```ts
306  // xxx.ets
307  @Entry
308  @Component
309  struct LineTo {
310    private settings: RenderingContextSettings = new RenderingContextSettings(true);
311    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
312    private path2Db: Path2D = new Path2D();
313
314    build() {
315      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
316        Canvas(this.context)
317          .width('100%')
318          .height('100%')
319          .backgroundColor('#ffff00')
320          .onReady(() => {
321            this.path2Db.moveTo(100, 100)
322            this.path2Db.lineTo(100, 200)
323            this.path2Db.lineTo(200, 200)
324            this.path2Db.lineTo(200, 100)
325            this.path2Db.closePath()
326            this.context.stroke(this.path2Db)
327          })
328      }
329      .width('100%')
330      .height('100%')
331    }
332  }
333  ```
334
335  ![zh-cn_image_0000001238832437](figures/zh-cn_image_0000001238832437.png)
336
337
338### bezierCurveTo
339
340bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
341
342创建三次贝塞尔曲线的路径。
343
344**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
345
346**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
347
348**系统能力:** SystemCapability.ArkUI.ArkUI.Full
349
350**参数:**
351
352| 参数名  | 类型     | 必填 |  说明   |
353| ----- | -------- | ---- | ---------- |
354| cp1x | number | 是 | 第一个贝塞尔参数的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
355| cp1y | number | 是 | 第一个贝塞尔参数的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
356| cp2x | number | 是 | 第二个贝塞尔参数的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
357| cp2y | number | 是 | 第二个贝塞尔参数的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
358| x    | number | 是 | 路径结束时的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp    |
359| y    | number | 是 | 路径结束时的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp    |
360
361**示例:**
362
363  ```ts
364  // xxx.ets
365  @Entry
366  @Component
367  struct BezierCurveTo {
368    private settings: RenderingContextSettings = new RenderingContextSettings(true);
369    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
370    private path2Db: Path2D = new Path2D();
371
372    build() {
373      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
374        Canvas(this.context)
375          .width('100%')
376          .height('100%')
377          .backgroundColor('#ffff00')
378          .onReady(() => {
379            this.path2Db.moveTo(10, 10)
380            this.path2Db.bezierCurveTo(20, 100, 200, 100, 200, 20)
381            this.context.stroke(this.path2Db)
382          })
383      }
384      .width('100%')
385      .height('100%')
386    }
387  }
388  ```
389
390  ![zh-cn_image_0000001239032455](figures/zh-cn_image_0000001239032455.png)
391
392
393### quadraticCurveTo
394
395quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
396
397创建二次贝塞尔曲线的路径。
398
399**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
400
401**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
402
403**系统能力:** SystemCapability.ArkUI.ArkUI.Full
404
405**参数:**
406
407| 参数名  | 类型     | 必填 |  说明   |
408| ----- | -------- | ---- | ---------- |
409| cpx  | number | 是 | 贝塞尔参数的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
410| cpy  | number | 是 | 贝塞尔参数的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
411| x    | number | 是 | 路径结束时的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
412| y    | number | 是 | 路径结束时的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
413
414**示例:**
415
416  ```ts
417  // xxx.ets
418  @Entry
419  @Component
420  struct QuadraticCurveTo {
421    private settings: RenderingContextSettings = new RenderingContextSettings(true);
422    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
423    private path2Db: Path2D = new Path2D();
424
425    build() {
426      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
427        Canvas(this.context)
428          .width('100%')
429          .height('100%')
430          .backgroundColor('#ffff00')
431          .onReady(() => {
432            this.path2Db.moveTo(10, 10)
433            this.path2Db.quadraticCurveTo(100, 100, 200, 20)
434            this.context.stroke(this.path2Db)
435        })
436      }
437      .width('100%')
438      .height('100%')
439    }
440  }
441  ```
442
443  ![zh-cn_image_0000001238952419](figures/zh-cn_image_0000001238952419.png)
444
445
446### arc
447
448arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
449
450绘制弧线路径。
451
452**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
453
454**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
455
456**系统能力:** SystemCapability.ArkUI.ArkUI.Full
457
458**参数:**
459
460| 参数名  | 类型     | 必填 |  说明   |
461| ----- | -------- | ---- | ---------- |
462| x                | number  | 是 | 弧线圆心的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
463| y                | number  | 是 | 弧线圆心的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
464| radius           | number  | 是 | 弧线的圆半径。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp    |
465| startAngle       | number  | 是 | 弧线的起始弧度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>单位:弧度。   |
466| endAngle         | number  | 是 | 弧线的终止弧度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>单位:弧度。   |
467| counterclockwise | boolean | 否 | 是否逆时针绘制圆弧。<br>true:逆时针方向绘制圆弧。<br>false:顺时针方向绘制圆弧。<br>默认值:false,设置null或undefined按默认值处理。  |
468
469**示例:**
470
471  ```ts
472  // xxx.ets
473  @Entry
474  @Component
475  struct Arc {
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.arc(100, 75, 50, 0, 6.28)
488            this.context.stroke(this.path2Db)
489          })
490      }
491      .width('100%')
492      .height('100%')
493    }
494  }
495  ```
496
497  ![zh-cn_image_0000001194192488](figures/zh-cn_image_0000001194192488.png)
498
499
500### arcTo
501
502arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
503
504依据圆弧经过的点和圆弧半径创建圆弧路径。
505
506**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
507
508**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
509
510**系统能力:** SystemCapability.ArkUI.ArkUI.Full
511
512**参数:**
513
514| 参数名  | 类型     | 必填 |  说明   |
515| ----- | -------- | ---- | ---------- |
516| x1     | number | 是 | 圆弧经过的第一个点的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
517| y1     | number | 是 | 圆弧经过的第一个点的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
518| x2     | number | 是 | 圆弧经过的第二个点的x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
519| y2     | number | 是 | 圆弧经过的第二个点的y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
520| radius | number | 是 | 圆弧的圆半径值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
521
522**示例:**
523
524  ```ts
525  // xxx.ets
526  @Entry
527  @Component
528  struct ArcTo {
529    private settings: RenderingContextSettings = new RenderingContextSettings(true);
530    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
531    private path2Db: Path2D = new Path2D();
532
533    build() {
534      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
535        Canvas(this.context)
536          .width('100%')
537          .height('100%')
538          .backgroundColor('#ffff00')
539          .onReady(() => {
540            this.path2Db.moveTo(0, 0)
541            this.path2Db.arcTo(150, 20, 150, 70, 50)
542            this.context.stroke(this.path2Db)
543          })
544      }
545      .width('100%')
546      .height('100%')
547    }
548  }
549  ```
550
551  ![zh-cn_image_0000001194352486](figures/zh-cn_image_0000001194352486.png)
552
553
554### ellipse
555
556ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
557
558在规定的矩形区域绘制一个椭圆。
559
560**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
561
562**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
563
564**系统能力:** SystemCapability.ArkUI.ArkUI.Full
565
566**参数:**
567
568| 参数名  | 类型     | 必填 |  说明   |
569| ----- | -------- | ---- | ---------- |
570| x                | number  | 是  | 椭圆圆心的x轴坐标。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp|
571| y                | number  | 是  | 椭圆圆心的y轴坐标。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp|
572| radiusX          | number  | 是  | 椭圆x轴的半径长度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp|
573| radiusY          | number  | 是  | 椭圆y轴的半径长度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp|
574| rotation         | number  | 是  | 椭圆的旋转角度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>单位:弧度                           |
575| startAngle       | number  | 是  | 椭圆绘制的起始点角度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>单位:弧度                        |
576| endAngle         | number  | 是  | 椭圆绘制的结束点角度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>单位:弧度                        |
577| counterclockwise | boolean | 否  | 是否以逆时针方向绘制椭圆。<br>true:逆时针方向绘制椭圆。<br>false:顺时针方向绘制椭圆。<br>默认值:false,设置null或undefined按默认值处理。 |
578
579**示例:**
580
581  ```ts
582  // xxx.ets
583  @Entry
584  @Component
585  struct CanvasExample {
586    private settings: RenderingContextSettings = new RenderingContextSettings(true);
587    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
588    private path2Db: Path2D = new Path2D();
589
590    build() {
591      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
592        Canvas(this.context)
593          .width('100%')
594          .height('100%')
595          .backgroundColor('#ffff00')
596          .onReady(() => {
597            this.path2Db.ellipse(200, 200, 50, 100, 0, Math.PI * 1, Math.PI * 2)
598            this.context.stroke(this.path2Db)
599          })
600      }
601      .width('100%')
602      .height('100%')
603    }
604  }
605  ```
606
607  ![zh-cn_image_0000001238712471](figures/zh-cn_image_0000001238712471.png)
608
609
610### rect
611
612rect(x: number, y: number, w: number, h: number): void
613
614创建矩形路径。
615
616**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
617
618**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
619
620**系统能力:** SystemCapability.ArkUI.ArkUI.Full
621
622**参数:**
623
624| 参数名  | 类型     | 必填 |  说明   |
625| ----- | -------- | ---- | ---------- |
626| x    | number | 是 | 指定矩形的左上角x坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
627| y    | number | 是 | 指定矩形的左上角y坐标值。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
628| w    | number | 是 | 指定矩形的宽度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
629| h    | number | 是 | 指定矩形的高度。<br>API version 18之前,设置NaN或Infinity时,整条路径不显示;设置null或undefined时,当前接口不生效。API version 18及以后,设置NaN、Infinity、null或undefined时当前接口不生效,其他传入有效参数的路径方法正常绘制。<br>默认单位:vp |
630
631**示例:**
632
633  ```ts
634  // xxx.ets
635  @Entry
636  @Component
637  struct CanvasExample {
638    private settings: RenderingContextSettings = new RenderingContextSettings(true);
639    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
640    private path2Db: Path2D = new Path2D();
641
642    build() {
643      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
644        Canvas(this.context)
645          .width('100%')
646          .height('100%')
647          .backgroundColor('#ffff00')
648          .onReady(() => {
649            this.path2Db.rect(20, 20, 100, 100);
650            this.context.stroke(this.path2Db)
651          })
652      }
653      .width('100%')
654      .height('100%')
655    }
656  }
657  ```
658
659  ![zh-cn_image_0000001193872544](figures/zh-cn_image_0000001193872544.png)
660
661### roundRect<sup>20+</sup>
662
663roundRect(x: number, y: number, w: number, h: number, radii?: number | Array\<number>): void
664
665创建圆角矩形路径,此方法不会直接渲染内容,如需将圆角矩形绘制到画布上,可以使用fill或stroke方法。
666
667**卡片能力:** 从API version 20开始,该接口支持在ArkTS卡片中使用。
668
669**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
670
671**系统能力:** SystemCapability.ArkUI.ArkUI.Full
672
673**参数:**
674
675| 参数名   | 类型     | 必填   | 说明            |
676| ---- | ------ | ---- | ------------- |
677| x    | number | 是    | 指定矩形的左上角x坐标值。<br>null按0处理,undefined按无效值处理,不进行绘制。<br>如需绘制完整矩形,取值范围:[0, Canvas宽度)。<br>默认单位:vp |
678| y    | number | 是    | 指定矩形的左上角y坐标值。<br>null按0处理,undefined按无效值处理,不进行绘制。<br>如需绘制完整矩形,取值范围:[0, Canvas高度)。<br>默认单位:vp |
679| w    | number | 是    | 指定矩形的宽度,设置负值为向左绘制。<br>null按0处理,undefined按无效值处理,不进行绘制。<br>如需绘制完整矩形,取值范围:[-x, Canvas宽度 - x]。<br>默认单位:vp |
680| h    | number | 是    | 指定矩形的高度,设置负值为向上绘制。<br>null按0处理,undefined按无效值处理,不进行绘制。<br>如需绘制完整矩形,取值范围:[-y, Canvas高度 - y]。<br>默认单位:vp |
681| radii | number \| Array\<number> | 否 | 指定用于矩形角的圆弧半径的数字或列表。<br>参数类型为number时,所有矩形角的圆弧半径按该数字执行。<br>参数类型为Array\<number>时,数目为1-4个按下面执行:<br>[所有矩形角的圆弧半径]<br>[左上及右下矩形角的圆弧半径, 右上及左下矩形角的圆弧半径]<br>[左上矩形角的圆弧半径, 右上及左下矩形角的圆弧半径, 右下矩形角的圆弧半径]<br>[左上矩形角的圆弧半径, 右上矩形角的圆弧半径, 右下矩形角的圆弧半径, 左下矩形角的圆弧半径]<br>radii存在负数或列表的数目不在[1,4]内时抛出异常,错误码:103701。<br>默认值:0,null和undefined按默认值处理。<br>圆弧半径超过矩形宽高时会等比例缩放到宽高的长度。<br>默认单位:vp |
682
683**错误码:**
684
685以下错误码的详细介绍请参见[Canvas组件错误码](../errorcode-canvas.md)。
686
687| 错误码ID | 错误信息 | 可能原因 |
688| -------- | -------- | -------- |
689| 103701   | Parameter error.| 1. The param radii is a list that has zero or more than four elements; 2. The param radii contains negative value. |
690
691**示例:**
692
693该示例展示了绘制六个圆角矩形:
694
6951. 创建一个(10vp, 10vp)为起点,宽高为100vp,四个矩形角圆弧半径为10vp的圆角矩形并填充;
696
6972. 创建一个(120vp, 10vp)为起点,宽高为100vp,四个矩形角圆弧半径为10vp的圆角矩形并填充;
698
6993. 创建一个(10vp, 120vp)为起点,宽高为100vp,左上矩形角圆弧半径及右下矩形角圆弧半径为10vp,右上矩形角圆弧半径及左下矩形角圆弧半径为20vp的圆角矩形并描边;
700
7014. 创建一个(120vp, 120vp)为起点,宽高为100vp,左上矩形角圆弧半径为10vp,右上矩形角圆弧半径及左下矩形角圆弧半径为20vp,右下矩形角圆弧半径为30vp的圆角矩形并描边;
702
7035. 创建一个(10vp, 230vp)为起点,宽高为100vp,左上矩形角圆弧半径为10vp,右上矩形角圆弧半径为20vp,右下矩形角圆弧半径为30vp,左下矩形角圆弧半径为40vp的圆角矩形并描边;
704
7056. 创建一个(220vp, 330vp)为起点,宽高为-100vp,左上矩形角圆弧半径为10vp,右上矩形角圆弧半径为20vp,右下矩形角圆弧半径为30vp,左下矩形角圆弧半径为40vp的圆角矩形并描边。
706
707  ```ts
708  // xxx.ets
709  import { BusinessError } from '@kit.BasicServicesKit';
710
711  @Entry
712  @Component
713  struct CanvasExample {
714    private settings: RenderingContextSettings = new RenderingContextSettings(true);
715    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
716    private pathA: Path2D = new Path2D();
717    private pathB: Path2D = new Path2D();
718
719    build() {
720      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
721        Canvas(this.context)
722          .width('100%')
723          .height('100%')
724          .backgroundColor('#D5D5D5')
725          .onReady(() => {
726            try {
727              this.context.fillStyle = '#707070'
728              // 创建一个(10vp, 10vp)为起点,宽高为100vp,四个矩形角圆弧半径为10vp的圆角矩形
729              this.pathA.roundRect(10, 10, 100, 100, 10)
730              // 创建一个(120vp, 10vp)为起点,宽高为100vp,四个矩形角圆弧半径为10vp的圆角矩形
731              this.pathA.roundRect(120, 10, 100, 100, [10])
732              this.context.fill(this.pathA)
733              // 创建一个(10vp, 120vp)为起点,宽高为100vp,左上矩形角圆弧半径及右下矩形角圆弧半径为10vp,右上矩形角圆弧半径及左下矩形角圆弧半径为20vp的圆角矩形
734              this.pathB.roundRect(10, 120, 100, 100, [10, 20])
735              // 创建一个(120vp, 120vp)为起点,宽高为100vp,左上矩形角圆弧半径为10vp,右上矩形角圆弧半径及左下矩形角圆弧半径为20vp,右下矩形角圆弧半径为30vp的圆角矩形
736              this.pathB.roundRect(120, 120, 100, 100, [10, 20, 30])
737              // 创建一个(10vp, 230vp)为起点,宽高为100vp,左上矩形角圆弧半径为10vp,右上矩形角圆弧半径为20vp,右下矩形角圆弧半径为30vp,左下矩形角圆弧半径为40vp的圆角矩形
738              this.pathB.roundRect(10, 230, 100, 100, [10, 20, 30, 40])
739              // 创建一个(220vp, 330vp)为起点,宽高为-100vp,左上矩形角圆弧半径为10vp,右上矩形角圆弧半径为20vp,右下矩形角圆弧半径为30vp,左下矩形角圆弧半径为40vp的圆角矩形
740              this.pathB.roundRect(220, 330, -100, -100, [10, 20, 30, 40])
741              this.context.stroke(this.pathB)
742            } catch (error) {
743              let e: BusinessError = error as BusinessError;
744              console.error(`Failed to create roundRect. Code: ${e.code}, message: ${e.message}`);
745            }
746          })
747      }
748      .width('100%')
749      .height('100%')
750    }
751  }
752  ```
753
754  ![CanvasRoundRect](figures/CanvasRoundRect.jpeg)