ts-drawing-components-shape.md 12.8 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4
# Shape<a name="ZH-CN_TOPIC_0000001237555097"></a>

>![](../../public_sys-resources/icon-note.gif) **说明:** 
>该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
5 6 7 8 9 10 11

绘制组件的父组件,父组件中会描述所有绘制组件均支持的通用属性。

1、绘制组件使用Shape作为父组件,实现类似SVG的效果。

2、绘制组件单独使用,用于在页面上绘制指定的图形。

Z
zengyawen 已提交
12 13 14 15
## 权限列表<a name="section53281531154915"></a>



Z
zengyawen 已提交
16 17 18 19 20 21
## 子组件<a name="section5989144051714"></a>

可以包含子组件。

## 接口<a name="section5143192918416"></a>

Z
zengyawen 已提交
22
Shape\(value:\{target?: PixelMap\}\)
Z
zengyawen 已提交
23 24 25

-   参数

Z
zengyawen 已提交
26
    <table><thead align="left"><tr><th class="cellrowborder" valign="top" width="15.47%" id="mcps1.1.6.1.1"><p>参数名</p>
Z
zengyawen 已提交
27
    </th>
Z
zengyawen 已提交
28
    <th class="cellrowborder" valign="top" width="17.22%" id="mcps1.1.6.1.2"><p>参数类型</p>
Z
zengyawen 已提交
29
    </th>
Z
zengyawen 已提交
30
    <th class="cellrowborder" valign="top" width="12.49%" id="mcps1.1.6.1.3"><p>必填</p>
Z
zengyawen 已提交
31
    </th>
Z
zengyawen 已提交
32
    <th class="cellrowborder" valign="top" width="18.6%" id="mcps1.1.6.1.4"><p>默认值</p>
Z
zengyawen 已提交
33
    </th>
Z
zengyawen 已提交
34
    <th class="cellrowborder" valign="top" width="36.22%" id="mcps1.1.6.1.5"><p>参数描述</p>
Z
zengyawen 已提交
35 36 37
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
38
    <tbody><tr><td class="cellrowborder" valign="top" width="15.47%" headers="mcps1.1.6.1.1 "><p>target</p>
Z
zengyawen 已提交
39
    </td>
Z
zengyawen 已提交
40
    <td class="cellrowborder" valign="top" width="17.22%" headers="mcps1.1.6.1.2 "><p>PixelMap</p>
Z
zengyawen 已提交
41
    </td>
Z
zengyawen 已提交
42
    <td class="cellrowborder" valign="top" width="12.49%" headers="mcps1.1.6.1.3 "><p>否</p>
Z
zengyawen 已提交
43
    </td>
Z
zengyawen 已提交
44
    <td class="cellrowborder" valign="top" width="18.6%" headers="mcps1.1.6.1.4 "><p>null</p>
Z
zengyawen 已提交
45
    </td>
Z
zengyawen 已提交
46
    <td class="cellrowborder" valign="top" width="36.22%" headers="mcps1.1.6.1.5 "><p>绘制目标,可将图形绘制在指定的PixelMap对象中,若未设置,则在当前绘制目标中进行绘制。</p>
Z
zengyawen 已提交
47 48 49 50 51 52 53 54
    </td>
    </tr>
    </tbody>
    </table>


## 属性<a name="section922483920810"></a>

Z
zengyawen 已提交
55
<table><thead align="left"><tr><th class="cellrowborder" valign="top" width="20%" id="mcps1.1.6.1.1"><p>参数名称</p>
Z
zengyawen 已提交
56
</th>
Z
zengyawen 已提交
57
<th class="cellrowborder" valign="top" width="20%" id="mcps1.1.6.1.2"><p>参数类型</p>
Z
zengyawen 已提交
58
</th>
Z
zengyawen 已提交
59
<th class="cellrowborder" valign="top" width="20%" id="mcps1.1.6.1.3"><p>默认值</p>
Z
zengyawen 已提交
60
</th>
Z
zengyawen 已提交
61
<th class="cellrowborder" valign="top" width="20%" id="mcps1.1.6.1.4"><p>必填</p>
Z
zengyawen 已提交
62
</th>
Z
zengyawen 已提交
63
<th class="cellrowborder" valign="top" width="20%" id="mcps1.1.6.1.5"><p>参数描述</p>
Z
zengyawen 已提交
64 65 66
</th>
</tr>
</thead>
Z
zengyawen 已提交
67
<tbody><tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>viewPort</p>
Z
zengyawen 已提交
68
</td>
Z
zengyawen 已提交
69 70 71 72 73 74
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>{</p>
<p>x: Length,</p>
<p>y: Length,</p>
<p>width: Length,</p>
<p>height: Length</p>
<p>}</p>
Z
zengyawen 已提交
75
</td>
Z
zengyawen 已提交
76
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>-</p>
Z
zengyawen 已提交
77
</td>
Z
zengyawen 已提交
78
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
79
</td>
Z
zengyawen 已提交
80
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>形状的视口。</p>
Z
zengyawen 已提交
81 82
</td>
</tr>
Z
zengyawen 已提交
83
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>fill</p>
Z
zengyawen 已提交
84
</td>
Z
zengyawen 已提交
85
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>Color</p>
Z
zengyawen 已提交
86
</td>
Z
zengyawen 已提交
87
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>Black</p>
Z
zengyawen 已提交
88
</td>
Z
zengyawen 已提交
89
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
90
</td>
Z
zengyawen 已提交
91
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>填充颜色。</p>
Z
zengyawen 已提交
92 93
</td>
</tr>
Z
zengyawen 已提交
94
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>stroke</p>
Z
zengyawen 已提交
95
</td>
Z
zengyawen 已提交
96
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>Color</p>
Z
zengyawen 已提交
97
</td>
Z
zengyawen 已提交
98
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>-</p>
Z
zengyawen 已提交
99
</td>
Z
zengyawen 已提交
100
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
101
</td>
Z
zengyawen 已提交
102
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>边框颜色。</p>
Z
zengyawen 已提交
103 104
</td>
</tr>
Z
zengyawen 已提交
105
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>strokeDashArray</p>
Z
zengyawen 已提交
106
</td>
Z
zengyawen 已提交
107
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>Array<span>&lt;</span><span>Length</span><span>&gt;</span></p>
Z
zengyawen 已提交
108
</td>
Z
zengyawen 已提交
109
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>[]</p>
Z
zengyawen 已提交
110
</td>
Z
zengyawen 已提交
111
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
112
</td>
Z
zengyawen 已提交
113
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>设置边框的间隙。</p>
Z
zengyawen 已提交
114 115
</td>
</tr>
Z
zengyawen 已提交
116
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>strokeDashOffset</p>
Z
zengyawen 已提交
117
</td>
Z
zengyawen 已提交
118
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>Length</p>
Z
zengyawen 已提交
119
</td>
Z
zengyawen 已提交
120
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>0</p>
Z
zengyawen 已提交
121
</td>
Z
zengyawen 已提交
122
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
123
</td>
Z
zengyawen 已提交
124
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>边框绘制起点的偏移量。</p>
Z
zengyawen 已提交
125 126
</td>
</tr>
Z
zengyawen 已提交
127
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>strokeLineCap</p>
Z
zengyawen 已提交
128
</td>
Z
zengyawen 已提交
129
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p><a href="ts-appendix-enums.md#section549694781614">LineCapStyle</a></p>
Z
zengyawen 已提交
130
</td>
Z
zengyawen 已提交
131
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>Butt</p>
Z
zengyawen 已提交
132
</td>
Z
zengyawen 已提交
133
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
134
</td>
Z
zengyawen 已提交
135
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>路径端点绘制样式。</p>
Z
zengyawen 已提交
136 137
</td>
</tr>
Z
zengyawen 已提交
138
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>strokeLineJoin</p>
Z
zengyawen 已提交
139
</td>
Z
zengyawen 已提交
140
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p><a href="#li0434521283">LineJoinStyle</a></p>
Z
zengyawen 已提交
141
</td>
Z
zengyawen 已提交
142
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>Miter</p>
Z
zengyawen 已提交
143
</td>
Z
zengyawen 已提交
144
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
145
</td>
Z
zengyawen 已提交
146
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>边框拐角绘制样式。</p>
Z
zengyawen 已提交
147 148
</td>
</tr>
Z
zengyawen 已提交
149
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>strokeMiterLimit</p>
Z
zengyawen 已提交
150
</td>
Z
zengyawen 已提交
151
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>number</p>
Z
zengyawen 已提交
152
</td>
Z
zengyawen 已提交
153
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>4</p>
Z
zengyawen 已提交
154
</td>
Z
zengyawen 已提交
155
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
156
</td>
Z
zengyawen 已提交
157
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>锐角绘制成斜角的极限值。</p>
Z
zengyawen 已提交
158 159
</td>
</tr>
Z
zengyawen 已提交
160
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>strokeOpacity</p>
Z
zengyawen 已提交
161
</td>
Z
zengyawen 已提交
162
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>number</p>
Z
zengyawen 已提交
163
</td>
Z
zengyawen 已提交
164
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>1</p>
Z
zengyawen 已提交
165
</td>
Z
zengyawen 已提交
166
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
167
</td>
Z
zengyawen 已提交
168
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>设置边框的不透明度。</p>
Z
zengyawen 已提交
169 170
</td>
</tr>
Z
zengyawen 已提交
171
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>strokeWidth</p>
Z
zengyawen 已提交
172
</td>
Z
zengyawen 已提交
173
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>Length</p>
Z
zengyawen 已提交
174
</td>
Z
zengyawen 已提交
175
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>1</p>
Z
zengyawen 已提交
176
</td>
Z
zengyawen 已提交
177
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
178
</td>
Z
zengyawen 已提交
179
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>设置边框的宽度。</p>
Z
zengyawen 已提交
180 181
</td>
</tr>
Z
zengyawen 已提交
182
<tr><td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.1 "><p>antiAlias</p>
Z
zengyawen 已提交
183
</td>
Z
zengyawen 已提交
184
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.2 "><p>boolean</p>
Z
zengyawen 已提交
185
</td>
Z
zengyawen 已提交
186
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.3 "><p>true</p>
Z
zengyawen 已提交
187
</td>
Z
zengyawen 已提交
188
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.4 "><p></p>
Z
zengyawen 已提交
189
</td>
Z
zengyawen 已提交
190
<td class="cellrowborder" valign="top" width="20%" headers="mcps1.1.6.1.5 "><p>是否开启抗锯齿。</p>
Z
zengyawen 已提交
191 192 193 194 195 196 197
</td>
</tr>
</tbody>
</table>

-   <a name="li0434521283"></a>LineJoinStyle枚举说明

Z
zengyawen 已提交
198
    <table><thead align="left"><tr><th class="cellrowborder" valign="top" width="25.2%" id="mcps1.1.3.1.1"><p>名称</p>
Z
zengyawen 已提交
199
    </th>
Z
zengyawen 已提交
200
    <th class="cellrowborder" valign="top" width="74.8%" id="mcps1.1.3.1.2"><p>描述</p>
Z
zengyawen 已提交
201 202 203
    </th>
    </tr>
    </thead>
Z
zengyawen 已提交
204
    <tbody><tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Bevel</p>
Z
zengyawen 已提交
205
    </td>
Z
zengyawen 已提交
206
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>使用斜角连接路径段。</p>
Z
zengyawen 已提交
207 208
    </td>
    </tr>
Z
zengyawen 已提交
209
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Miter</p>
Z
zengyawen 已提交
210
    </td>
Z
zengyawen 已提交
211
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>使用尖角连接路径段。</p>
Z
zengyawen 已提交
212 213
    </td>
    </tr>
Z
zengyawen 已提交
214
    <tr><td class="cellrowborder" valign="top" width="25.2%" headers="mcps1.1.3.1.1 "><p>Round</p>
Z
zengyawen 已提交
215
    </td>
Z
zengyawen 已提交
216
    <td class="cellrowborder" valign="top" width="74.8%" headers="mcps1.1.3.1.2 "><p>使用圆角连接路径段。</p>
Z
zengyawen 已提交
217 218 219 220 221 222 223 224 225 226 227 228 229 230
    </td>
    </tr>
    </tbody>
    </table>


## 示例<a name="section4459736105512"></a>

```
@Entry
@Component
struct ShapeExample {
  build() {
    Column({ space: 5 }) {
Z
zengyawen 已提交
231
      Text('basic').fontSize(30).fontColor(0xCCCCCC).width(320)
Z
zengyawen 已提交
232 233 234 235 236 237 238 239
      // 在Shape的(-2, -2)点绘制一个 300 * 50 带边框的矩形,颜色0x317Af7,边框颜色黑色,边框宽度4,边框间隙20,向左偏移10,尖端样式圆角,拐角样式圆角,抗锯齿(默认开启)
      // 在Shape的(-2, 58)点绘制一个 300 * 50 带边框的椭圆,颜色0x317Af7,边框颜色黑色,边框宽度4,边框间隙20,向左偏移10,尖端样式圆角,拐角样式圆角,抗锯齿(默认开启)
      // 在Shape的(-2, 118)点绘制一个 300 * 10 线段,颜色0x317Af7,边框颜色黑色,宽度4,间隙20,向左偏移10,尖端样式圆角,拐角样式圆角,抗锯齿(默认开启)
      Shape() {
        Rect().width(300).height(50)
        Ellipse().width(300).height(50).offset({ x: 0, y: 60 })
        Path().width(300).height(10).commands('M0 0 L900 0').offset({ x: 0, y: 120 })
      }
Z
zengyawen 已提交
240
      .viewPort({ x: -2, y: -2, width: 304, height: 130 })
Z
zengyawen 已提交
241 242 243 244 245 246 247 248
      .fill(0x317Af7).stroke(Color.Black).strokeWidth(4)
      .strokeDashArray([20]).strokeDashOffset(10).strokeLineCap(LineCapStyle.Round)
      .strokeLineJoin(LineJoinStyle.Round).antiAlias(true)
      // 在Shape的(-1, -1)点绘制一个 300 * 50 带边框的矩形,颜色0x317Af7,边框颜色黑色,边框宽度2
      Shape() {
        Rect().width(300).height(50)
      }.viewPort({ x: -1, y: -1, width: 302, height: 52 }).fill(0x317Af7).stroke(Color.Black).strokeWidth(2)

Z
zengyawen 已提交
249
      Text('border').fontSize(30).fontColor(0xCCCCCC).width(320).margin({top:30})
Z
zengyawen 已提交
250 251 252
      // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,边框间隙20
      Shape() {
        Path().width(300).height(10).commands('M0 0 L900 0')
Z
zengyawen 已提交
253
      }.viewPort({ x: 0, y: -5, width: 300, height: 20 }).stroke(0xEE8443).strokeWidth(10).strokeDashArray([20])
Z
zengyawen 已提交
254 255 256 257
      // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,边框间隙20,向左偏移10
      Shape() {
        Path().width(300).height(10).commands('M0 0 L900 0')
      }
Z
zengyawen 已提交
258
      .viewPort({ x: 0, y: -5, width: 300, height: 20 })
Z
zengyawen 已提交
259 260 261 262
      .stroke(0xEE8443).strokeWidth(10).strokeDashArray([20]).strokeDashOffset(10)
      // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,透明度0.5
      Shape() {
        Path().width(300).height(10).commands('M0 0 L900 0')
Z
zengyawen 已提交
263
      }.viewPort({ x: 0, y: -5, width: 300, height: 20 }).stroke(0xEE8443).strokeWidth(10).strokeOpacity(0.5)
Z
zengyawen 已提交
264 265 266 267
      // 在Shape的(0, -5)点绘制一个 300 * 10 直线,颜色0xEE8443,边框宽度10,边框间隙20,向左偏移10,尖端样式圆角
      Shape() {
        Path().width(300).height(10).commands('M0 0 L900 0')
      }
Z
zengyawen 已提交
268
      .viewPort({ x: 0, y: -5, width: 300, height: 20 })
Z
zengyawen 已提交
269 270 271
      .stroke(0xEE8443).strokeWidth(10).strokeDashArray([20]).strokeLineCap(LineCapStyle.Round)
      // 在Shape的(-5, -5)点绘制一个 300 * 50 带边框的矩形,颜色0x317Af7,边框宽度10,边框颜色0xEE8443,拐角样式圆角
      Shape() {
Z
zengyawen 已提交
272
        Rect().width(300).height(100)
Z
zengyawen 已提交
273
      }
Z
zengyawen 已提交
274
      .viewPort({ x: -5, y: -5, width: 310, height: 120 })
Z
zengyawen 已提交
275 276 277 278 279 280 281 282 283 284 285 286
      .fill(0x317Af7).stroke(0xEE8443).strokeWidth(10).strokeLineJoin(LineJoinStyle.Round)
      Shape() {
        Path().width(300).height(60).commands('M0 0 L400 0 L400 200 Z')
      }
      .viewPort({ x: -80, y: -5, width: 310, height: 100 })
      .fill(0x317Af7).stroke(0xEE8443).strokeWidth(10)
      .strokeLineJoin(LineJoinStyle.Miter).strokeMiterLimit(5)
    }.width('100%').margin({ top: 15 })
  }
}
```

Z
zengyawen 已提交
287
![](figures/2-01.png)
Z
zengyawen 已提交
288