• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 几何形状绘制(ArkTS)
2
3
4## 场景介绍
5
6当前支持绘制的几何形状,主要包括以下几种:
7
8- 点
9
10- 圆弧
11
12- 圆
13
14- 路径
15
16- 区域
17
18- 矩形
19
20- 圆角矩形
21
22大部分的几何形状均可以选择使用画笔或者使用画刷来实现绘制,其中点的绘制只能使用画笔。
23
24
25## 接口说明
26
27几何形状绘制的常用接口如下表所示,详细的使用和参数说明请见[drawing.Canvas](../reference/apis-arkgraphics2d/js-apis-graphics-drawing.md#canvas)。
28
29| 接口 | 描述 |
30| -------- | -------- |
31| drawPoint(x: number, y: number): void | 用于画一个点。 |
32| drawArc(arc: common2D.Rect, startAngle: number, sweepAngle: number): void | 用于画一个弧。 |
33| drawCircle(x: number, y: number, radius: number): void | 用于画一个圆形。 |
34| drawPath(path: Path): void | 用于画一个自定义路径。 |
35| drawRegion(region: Region): void | 用于画一块区域。 |
36| drawRect(left: number, top: number, right: number, bottom: number): void | 用于画一个矩形。 |
37| drawRoundRect(roundRect: RoundRect): void | 用于画一个圆角矩形。 |
38
39
40## 绘制点
41
42点只能基于画笔在画布上进行绘制,通过使用drawPoint()接口绘制点。绘制点需要接受两个参数,分别为需要绘制的点的x坐标和y坐标。
43
44简单示例如下:
45
46```ts
47// 设置画笔
48let pen = new drawing.Pen();
49// 设置颜色
50pen.setColor(0xFF, 0xFF, 0x00, 0x00);
51// 设置线宽
52pen.setStrokeWidth(40);
53// 设置画笔描边效果
54canvas.attachPen(pen);
55// 绘制5个点
56canvas.drawPoint(200, 200);
57canvas.drawPoint(400, 400);
58canvas.drawPoint(600, 600);
59canvas.drawPoint(800, 800);
60canvas.drawPoint(1000, 1000);
61// 去除描边效果
62canvas.detachPen();
63```
64
65![Screenshot_20241129174520171](figures/Screenshot_20241129174520171.jpg)
66
67
68## 绘制圆弧
69
70可以使用画笔或画刷在画布上进行圆弧的绘制,通过使用drawArc()接口绘制圆弧。
71
72绘制圆弧需要一个矩形([common2D.Rect](../reference/apis-arkgraphics2d/js-apis-graphics-common2D.md#rect)),以矩形的边为轮廓进行绘制,还需要两个参数,分别表示弧形的起始角度(startAngle)和扫描角度(sweepAngle)。
73
74此处以使用画笔绘制圆弧为例,简单示例如下:
75```ts
76// 创建画笔
77let pen = new drawing.Pen();
78// 设置颜色
79pen.setColor({ alpha: 0xFF, red: 0xFF, green: 0x00, blue: 0x00 });
80// 设置线宽
81pen.setStrokeWidth(20);
82// 设置画笔描边效果
83canvas.attachPen(pen);
84// 创建矩形对象
85const rect: common2D.Rect = {left:100, top:200, right:1000, bottom:600};
86// 绘制矩形
87canvas.drawArc(rect, 0, 180);
88// 去除描边效果
89canvas.detachPen();
90```
91
92![zh-cn_image_0000002194025289](figures/zh-cn_image_0000002194025289.png)
93
94
95## 绘制圆
96
97可以使用画笔或画刷在画布上进行圆的绘制,通过使用drawCircle()接口绘制圆。
98
99绘制圆需要圆心点的x坐标和y坐标,以及圆半径(radius)。
100
101此处以使用画笔绘制圆为例,简单示例如下:
102```ts
103// 创建画笔
104let pen = new drawing.Pen();
105// 设置颜色
106pen.setColor({ alpha: 0xFF, red: 0xFF, green: 0x00, blue: 0x00 });
107// 设置线宽
108pen.setStrokeWidth(20);
109// 设置画笔描边效果
110canvas.attachPen(pen);
111// 绘制圆
112canvas.drawCircle(630, 630, 500);
113// 去除描边效果
114canvas.detachPen();
115```
116
117![Screenshot_20241129172555673](figures/Screenshot_20241129172555673.jpg)
118
119
120## 绘制路径
121
122可以使用画笔或画刷在画布上进行路径的绘制,路径具体可以用于绘制直线、弧线、贝塞尔曲线等,也可以通过路径组合的方式组成其他复杂的形状。
123
124绘制路径的相关接口和实现如下,详细的使用和参数说明请见[Path](../reference/apis-arkgraphics2d/js-apis-graphics-drawing.md#path)。常用的接口如下:
125
1261. 使用new drawing.Path()可以创建一个路径对象。
127
1282. 使用moveTo()接口可以设置自定义路径的起始点位置。
129
1303. 使用lineTo()接口可以添加一条从起始点或路径的最后点位置(若路径没有内容则默认为(0,0))到目标点位置的线段。
131
132此处以使用画笔和画刷绘制五角星为例,简单示例如下:
133
134```ts
135let height_ = 1800;
136let width_ = 1800;
137let len = height_ / 4;
138let aX = width_ / 3;
139let aY = height_ / 6;
140let dX = aX - len * Math.sin(18.0);
141let dY = aY + len * Math.cos(18.0);
142let cX = aX + len * Math.sin(18.0);
143let cY = dY;
144let bX = aX + (len / 2.0);
145let bY = aY + Math.sqrt((cX - dX) * (cX - dX) + (len / 2.0) * (len / 2.0));
146let eX = aX - (len / 2.0);
147let eY = bY;
148
149// 创建一个path对象,然后使用接口连接成一个五角星形状
150let path = new drawing.Path();
151// 指定path的起始位置
152path.moveTo(aX, aY);
153// 用直线连接到目标点
154path.lineTo(bX, bY);
155path.lineTo(cX, cY);
156path.lineTo(dX, dY);
157path.lineTo(eX, eY);
158// 闭合形状,path绘制完毕
159path.close()
160
161// 创建画笔对象
162let pen = new drawing.Pen();
163// 设置抗锯齿
164pen.setAntiAlias(true);
165// 设置描边颜色
166pen.setColor(0xFF, 0xFF, 0x00, 0x00);
167// 设置线宽
168pen.setStrokeWidth(10.0);
169// 设置画笔描边效果
170canvas.attachPen(pen);
171// 创建画刷
172let brush = new drawing.Brush();
173// 设置填充颜色
174brush.setColor(0xFF, 0x00, 0xFF, 0x00);
175// 设置画刷填充效果
176canvas.attachBrush(brush);
177// 绘制路径
178canvas.drawPath(path);
179// 去除填充效果
180canvas.detachBrush();
181// 去除描边效果
182canvas.detachPen();
183```
184
185![Screenshot_20241129164326302](figures/Screenshot_20241129164326302.jpg)
186
187
188## 绘制区域
189
190区域不是一个特定的形状,可以设置为指定的矩形或路径,也可以对两个区域进行组合操作。可以使用画笔或画刷对区域进行绘制。详细的API说明请参考[Region](../reference/apis-arkgraphics2d/js-apis-graphics-drawing.md#region12)。
191
192目前支持设置矩形区域和路径区域,分别通过setRect()接口和setPath()接口来设置。
193
194此处以使用画刷绘制矩形的组合区域为例,示例如下:
195
196```ts
197// 创建画刷
198let brush = new drawing.Brush();
199// 设置颜色
200brush.setColor(0xFF, 0xFF,  0x00, 0x00);
201// 设置画刷填充效果
202canvas.attachBrush(brush);
203// 创建左上角的region1
204let region1 = new drawing.Region();
205region1.setRect(100, 100, 600, 600);
206// 创建右下角的region2
207let region2 = new drawing.Region();
208region2.setRect(300, 300, 900, 900);
209// 将两个区域以XOR的方式组合
210region1.op(region2, drawing.RegionOp.XOR);
211// 绘制区域
212canvas.drawRegion(region1);
213// 去除填充效果
214canvas.detachBrush();
215```
216
217![Screenshot_20241206112505234](figures/Screenshot_20241206112505234.jpg)
218
219
220## 绘制矩形
221
222可以使用画笔或画刷在画布上进行矩形的绘制。使用drawRect()接口绘制矩形。接口需要传入四个浮点数,分别表示矩形的左、上、右、下四个位置的坐标,连接这4个坐标形成一个矩形。
223
224此处以使用画刷绘制矩形为例,简单示例如下:
225
226```ts
227// 创建画刷
228let brush = new drawing.Brush();
229// 设置颜色
230brush.setColor(0xFF, 0xFF,  0x00, 0x00);
231// 设置画刷填充效果
232canvas.attachBrush(brush);
233// 绘制矩形
234canvas.drawRect(200, 200, 1000, 700);
235// 去除填充效果
236canvas.detachBrush();
237```
238
239![zh-cn_image_0000002194110921](figures/zh-cn_image_0000002194110921.png)
240
241
242## 绘制圆角矩形
243
244可以使用画笔或画刷在画布上进行圆角矩形的绘制。使用drawRoundRect()接口绘制圆角矩形。接口接受1个入参roundRect,对应为圆角矩形对象。
245
246圆角矩形对象通过new drawing.RoundRect()接口构造,构造函数接受3个参数,分别为:
247
248- common2D.Rect(矩形对象),圆角矩形是在该矩形的基础上切圆角形成。
249
250- x轴上的圆角半径。
251
252- y轴上的圆角半径。
253
254此处以使用画刷绘制圆角矩形为例,简单示例代码如下:
255
256```ts
257// 创建画刷
258let brush = new drawing.Brush();
259// 设置颜色
260brush.setColor(0xFF, 0xFF, 0x00, 0x00);
261// 设置画刷填充效果
262canvas.attachBrush(brush);
263// 创建矩形对象
264let rect: common2D.Rect = { left: 200, top: 200, right: 1000, bottom: 700 };
265// 创建圆角矩形对象
266let rrect = new drawing.RoundRect(rect, 30, 30);
267// 绘制圆角矩形
268canvas.drawRoundRect(rrect);
269// 去除填充效果
270canvas.detachBrush();
271```
272
273![zh-cn_image_0000002158584406](figures/zh-cn_image_0000002158584406.png)
274
275<!--RP1-->
276## 相关实例
277
278针对Drawing(ArkTS)的开发,有以下相关实例可供参考:
279
280- [ArkTSGraphicsDraw (API14)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/DocsSample/Drawing/ArkTSGraphicsDraw)
281<!--RP1End-->