• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 形状裁剪
2
3用于对组件进行裁剪、遮罩处理。
4
5>  **说明:**
6>
7> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## clip<sup>12+</sup>
10
11clip(value: boolean)
12
13是否对子组件超出当前组件范围外的区域进行裁剪。
14
15**系统能力:** SystemCapability.ArkUI.ArkUI.Full
16
17**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
18
19**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
20
21**参数:**
22
23| 参数名 | 类型    | 必填 | 说明                                                         |
24| ------ | ------- | ---- | ------------------------------------------------------------ |
25| value  | boolean | 是   | 参数为boolean类型,设置是否按照父容器边缘轮廓进行裁剪。<br/>默认值:false <br/>true表示按照父容器边缘轮廓进行裁剪,false表示不对子组件进行裁剪。 <br/>**说明:** 设置为true后,子组件超出当前组件范围外的区域将不响应绑定的手势事件。 |
26
27## clip<sup>18+</sup>
28
29clip(clip: Optional\<boolean>)
30
31是否对子组件超出当前组件范围外的区域进行裁剪。与[clip<sup>12+</sup>](#clip12)相比,clip参数新增了对undefined类型的支持。
32
33**系统能力:** SystemCapability.ArkUI.ArkUI.Full
34
35**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
36
37**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
38
39**参数:**
40
41| 参数名 | 类型               | 必填                                                         | 说明 |
42| ------ | ------------------ | ------------------------------------------------------------ | ---- |
43| clip   | Optional\<boolean> | 是 |  参数为boolean类型,设置是否按照父容器边缘轮廓进行裁剪。<br/>默认值:false <br/>**说明:** 设置为true后,子组件超出当前组件范围外的区域将不响应绑定的手势事件。<br/>当clip的值为undefined时,恢复为不对子组件超出当前组件范围外的区域进行裁剪。    |
44
45## clip<sup>(deprecated)</sup>
46
47clip(value: boolean | CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute)
48
49按指定的形状对当前组件进行裁剪。
50
51> **说明:**
52>
53> 从API version 7开始支持,从API version 12开始废弃。建议使用[clip](#clip12)和[clipShape](#clipshape12)替代。
54
55**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
56
57**系统能力:** SystemCapability.ArkUI.ArkUI.Full
58
59**参数:**
60
61| 参数名 | 类型                                                         | 必填 | 说明                                                         |
62| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
63| value  | boolean&nbsp;\|&nbsp;[CircleAttribute](ts-drawing-components-circle.md)&nbsp;\|&nbsp;[EllipseAttribute](ts-drawing-components-ellipse.md)&nbsp;\|&nbsp;[PathAttribute](ts-drawing-components-path.md)&nbsp;\|&nbsp;[RectAttribute](ts-drawing-components-rect.md) | 是   | 参数为相应类型的组件,按指定的形状对当前组件进行裁剪;参数为boolean类型时,设置是否按照父容器边缘轮廓进行裁剪。<br/>默认值:false <br/>**说明:** 参数为对应类型的组件时,裁剪不会导致被裁剪区域无法响应绑定的手势事件。参数为boolean类型时,裁剪会导致被裁剪区域无法响应绑定的手势事件。 |
64
65## clipShape<sup>12+</sup>
66
67clipShape(value: CircleShape | EllipseShape | PathShape | RectShape)
68
69按指定的形状对当前组件进行裁剪。
70
71**系统能力:** SystemCapability.ArkUI.ArkUI.Full
72
73**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
74
75**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
76
77**参数:**
78
79| 参数名 | 类型                                                         | 必填 | 说明                                                         |
80| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
81| value  | [CircleShape](../js-apis-arkui-shape.md#circleshape)&nbsp;\|&nbsp;[EllipseShape](../js-apis-arkui-shape.md#ellipseshape)&nbsp;\|&nbsp;[PathShape](../js-apis-arkui-shape.md#pathshape)&nbsp;\|&nbsp;[RectShape](../js-apis-arkui-shape.md#rectshape) | 是   | 参数为相应类型的组件,按指定的形状对当前组件进行裁剪。<br/>**说明:** 裁剪不会导致被裁剪区域无法响应绑定的手势事件。 |
82
83## clipShape<sup>18+</sup>
84
85clipShape(shape: Optional\<CircleShape | EllipseShape | PathShape | RectShape>)
86
87按指定的形状对当前组件进行裁剪。与[clipShape<sup>12+</sup>](#clipshape12)相比,shape参数新增了对undefined类型的支持。
88
89**系统能力:** SystemCapability.ArkUI.ArkUI.Full
90
91**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
92
93**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
94
95**参数:**
96
97| 参数名 | 类型                                                         | 必填 | 说明                                                         |
98| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
99| shape  | Optional\<[CircleShape](../js-apis-arkui-shape.md#circleshape)&nbsp;\|&nbsp;[EllipseShape](../js-apis-arkui-shape.md#ellipseshape)&nbsp;\|&nbsp;[PathShape](../js-apis-arkui-shape.md#pathshape)&nbsp;\|&nbsp;[RectShape](../js-apis-arkui-shape.md#rectshape)> | 是   | 参数为相应类型的组件,按指定的形状对当前组件进行裁剪。<br/>**说明:** 裁剪不会导致被裁剪区域无法响应绑定的手势事件。<br/>当shape的值为undefined时,维持上次取值。 |
100
101## mask<sup>12+</sup>
102
103mask(value: ProgressMask)
104
105为组件上添加可调节进度的遮罩。
106
107**系统能力:** SystemCapability.ArkUI.ArkUI.Full
108
109**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
110
111**参数:**
112
113| 参数名 | 类型                            | 必填 | 说明                                                 |
114| ------ | ------------------------------- | ---- | ---------------------------------------------------- |
115| value  | [ProgressMask](#progressmask10) | 是   | 在当前组件上加上可动态设置进度、最大值和颜色的遮罩。 |
116
117## mask<sup>18+</sup>
118
119mask(mask: Optional\<ProgressMask>)
120
121为组件上添加可调节进度的遮罩。与[mask<sup>12+</sup>](#mask12)相比,mask参数新增了对undefined类型的支持。
122
123**系统能力:** SystemCapability.ArkUI.ArkUI.Full
124
125**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
126
127**参数:**
128
129| 参数名 | 类型                                                         | 必填 | 说明                             |
130| ------ | ------------------------------------------------------------ | ---- | -------------------------------- |
131| mask | Optional\<[ProgressMask](#progressmask10)> | 是 | 在当前组件上加上可动态设置进度、最大值和颜色的遮罩。<br/>当mask的值为undefined时,恢复为无进度遮罩效果。     |
132
133## mask<sup>(deprecated)</sup>
134
135mask(value: CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute | ProgressMask)
136
137为组件上添加指定形状的遮罩。
138
139> **说明:**
140>
141> 从API version 7开始支持,从API version 12开始废弃。建议使用[mask](#mask12)和[maskShape](#maskshape12)替代。
142
143**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
144
145**系统能力:** SystemCapability.ArkUI.ArkUI.Full
146
147**参数:**
148
149| 参数名 | 类型                                                         | 必填 | 说明                             |
150| ------ | ------------------------------------------------------------ | ---- | -------------------------------- |
151| value  | [CircleAttribute](ts-drawing-components-circle.md)&nbsp;\|&nbsp;[EllipseAttribute](ts-drawing-components-ellipse.md)&nbsp;\|&nbsp;[PathAttribute](ts-drawing-components-path.md)&nbsp;\|&nbsp;[RectAttribute](ts-drawing-components-rect.md) \|&nbsp;[ProgressMask](#progressmask10)<sup>10+</sup> | 是   | 在当前组件上加上指定形状的遮罩。 |
152
153## maskShape<sup>12+</sup>
154
155maskShape(value: CircleShape | EllipseShape | PathShape | RectShape)
156
157为组件上添加指定形状的遮罩。
158
159**系统能力:** SystemCapability.ArkUI.ArkUI.Full
160
161**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
162
163**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
164
165**参数:**
166
167| 参数名 | 类型                                                         | 必填 | 说明                             |
168| ------ | ------------------------------------------------------------ | ---- | -------------------------------- |
169| value  | [CircleShape](../js-apis-arkui-shape.md#circleshape)&nbsp;\|&nbsp;[EllipseShape](../js-apis-arkui-shape.md#ellipseshape)&nbsp;\|&nbsp;[PathShape](../js-apis-arkui-shape.md#pathshape)&nbsp;\|&nbsp;[RectShape](../js-apis-arkui-shape.md#rectshape) | 是   | 在当前组件上加上指定形状的遮罩。 |
170
171## maskShape<sup>18+</sup>
172
173maskShape(shape: Optional\<CircleShape | EllipseShape | PathShape | RectShape>)
174
175为组件上添加指定形状的遮罩。与[maskShape<sup>12+</sup>](#maskshape12)相比,shape参数新增了对undefined类型的支持。
176
177**系统能力:** SystemCapability.ArkUI.ArkUI.Full
178
179**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
180
181**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
182
183**参数:**
184
185| 参数名 | 类型                                                         | 必填 | 说明                                                         |
186| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
187| shape  | Optional\<[CircleShape](../js-apis-arkui-shape.md#circleshape)&nbsp;\|&nbsp;[EllipseShape](../js-apis-arkui-shape.md#ellipseshape)&nbsp;\|&nbsp;[PathShape](../js-apis-arkui-shape.md#pathshape)&nbsp;\|&nbsp;[RectShape](../js-apis-arkui-shape.md#rectshape)> | 是   | 在当前组件上加上指定形状的遮罩。<br/>当shape的值为undefined时,维持上次取值。 |
188
189## ProgressMask<sup>10+</sup>
190
191ProgressMask设置遮罩的进度、最大值和遮罩颜色。
192
193**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
194
195**系统能力:** SystemCapability.ArkUI.ArkUI.Full
196
197### constructor<sup>10+</sup>
198
199constructor(value: number, total: number, color: ResourceColor)
200
201构造ProgressMask对象。
202
203**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
204
205**系统能力:** SystemCapability.ArkUI.ArkUI.Full
206
207**参数:**
208
209| 参数名 | 参数类型                                   | 必填 | 参数描述           |
210| ------ | ------------------------------------------ | ---- | ------------------ |
211| value  | number                                     | 是   | 进度遮罩的当前值。<br/> 取值范围:[0.0, +∞) |
212| total  | number                                     | 是   | 进度遮罩的最大值。<br/> 取值范围:[0.0, +∞) |
213| color  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 进度遮罩的颜色。   |
214
215### updateProgress<sup>10+</sup>
216
217updateProgress(value: number): void
218
219更新进度遮罩的进度值。
220
221**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
222
223**系统能力:** SystemCapability.ArkUI.ArkUI.Full
224
225**参数:**
226
227| 参数名 | 参数类型 | 必填 | 参数描述           |
228| ------ | -------- | ---- | ------------------ |
229| value  | number   | 是   | 进度遮罩的当前值。 |
230
231### updateColor<sup>10+</sup>
232
233updateColor(value: ResourceColor): void
234
235更新进度遮罩的颜色。
236
237**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
238
239**系统能力:** SystemCapability.ArkUI.ArkUI.Full
240
241**参数:**
242
243| 参数名 | 参数类型                                   | 必填 | 参数描述         |
244| ------ | ------------------------------------------ | ---- | ---------------- |
245| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 进度遮罩的颜色。 |
246
247### enableBreathingAnimation<sup>12+</sup>
248
249enableBreathingAnimation(value: boolean): void
250
251进度满时的呼吸光晕动画开关。默认关闭呼吸光晕动画。
252
253**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
254
255**系统能力:** SystemCapability.ArkUI.ArkUI.Full
256
257**参数:**
258
259| 参数名 | 参数类型                                   | 必填 | 参数描述         |
260| ------ | ------------------------------------------ | ---- | ---------------- |
261| value  | boolean | 是   | 设置为true则开启呼吸光晕动画。默认值:false |
262
263
264## 示例
265
266### 示例1(使用不同裁剪属性)
267
268```ts
269// xxx.ets
270import { CircleShape, RectShape } from '@kit.ArkUI'
271
272@Entry
273@Component
274struct ClipAndMaskExample {
275  build() {
276    Column({ space: 15 }) {
277      Text('clip').fontSize(12).width('75%').fontColor('#DCDCDC')
278      Row() {
279        Image($r('app.media.testImg')).width('500px').height('280px')
280      }
281      .clip(true) // 如这里不设置clip为true,则Row组件的圆角不会限制其中的Image组件,Image组件的四个角会超出Row
282      .borderRadius(20)
283
284      // 用一个280px直径的圆对图片进行裁剪
285      Image($r('app.media.testImg'))
286        .clipShape(new CircleShape({ width: '280px', height: '280px' }))
287        .width('500px').height('280px')
288
289      Text('mask').fontSize(12).width('75%').fontColor('#DCDCDC')
290      // 给图片添加了一个500px*280px的方形遮罩
291      Image($r('app.media.testImg'))
292        .maskShape(new RectShape({ width: '500px', height: '280px' }).fill(Color.Gray))
293        .width('500px').height('280px')
294
295      // 给图片添加了一个280px*280px的圆形遮罩
296      Image($r('app.media.testImg'))
297        .maskShape(new CircleShape({ width: '280px', height: '280px' }).fill(Color.Gray))
298        .width('500px').height('280px')
299    }
300    .width('100%')
301    .margin({ top: 15 })
302  }
303}
304```
305
306![clipAndMask](figures/clipAndMask.PNG)
307
308### 示例2(裁剪属性动画)
309
310```ts
311@Entry
312@Component
313struct ProgressMaskExample {
314  @State progressflag1: boolean = true;
315  @State color: Color = 0x01006CDE;
316  @State value: number = 10.0;
317  @State enableBreathingAnimation: boolean = false;
318  @State progress: ProgressMask = new ProgressMask(10.0, 100.0, Color.Gray);
319
320  build() {
321    Column({ space: 15 }) {
322      Text('progress mask').fontSize(12).width('75%').fontColor('#DCDCDC')
323      // 给图片添加了一个280px*280px的进度遮罩
324      Image($r('app.media.testImg'))
325        .width('500px').height('280px')
326        .mask(this.progress)
327        .animation({
328          duration: 2000, // 动画时长
329          curve: Curve.Linear, // 动画曲线
330          delay: 0, // 动画延迟
331          iterations: 1, // 播放次数
332          playMode: PlayMode.Normal // 动画模式
333        }) // 对Button组件的宽高属性进行动画配置
334
335      // 更新进度遮罩的进度值
336      Button('updateProgress')
337        .onClick((event?: ClickEvent) => {
338          this.value += 10;
339          this.progress.updateProgress(this.value);
340        }).width(200).height(50).margin(20)
341
342      // 更新进度遮罩的颜色
343      Button('updateColor')
344        .onClick((event?: ClickEvent) => {
345          if (this.progressflag1) {
346            this.progress.updateColor(0x9fff0000);
347          } else {
348            this.progress.updateColor(0x9f0000ff);
349          }
350          this.progressflag1 = !this.progressflag1
351        }).width(200).height(50).margin(20)
352
353      // 开关呼吸光晕动画
354      Button('enableBreathingAnimation:' + this.enableBreathingAnimation)
355        .onClick((event?: ClickEvent) => {
356          this.enableBreathingAnimation = !this.enableBreathingAnimation
357          this.progress.enableBreathingAnimation(this.enableBreathingAnimation);
358        }).width(200).height(50).margin(20)
359
360      // 恢复进度遮罩
361      Button('click reset!')
362        .onClick((event?: ClickEvent) => {
363          this.value = 0;
364          this.progress.updateProgress(this.value);
365        }).width(200).height(50).margin(20)
366    }
367    .width('100%')
368    .margin({ top: 15 })
369  }
370}
371```
372
373![progressMask](figures/progressMask.gif)
374