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