• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.curves (插值计算)
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @CCFFWW-->
5<!--Designer: @yangfan229-->
6<!--Tester: @lxl007-->
7<!--Adviser: @HelloCrease-->
8
9本模块提供设置动画插值曲线功能,用于构造阶梯曲线对象、三阶贝塞尔曲线对象和弹簧曲线对象。
10
11> **说明:**
12>
13> 本模块首批接口从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15
16## 导入模块
17
18```ts
19import { curves } from '@kit.ArkUI';
20```
21
22
23## curves.initCurve<sup>9+</sup>
24
25initCurve(curve?: Curve): ICurve
26
27插值曲线的初始化函数,可以根据入参创建一个插值曲线对象。
28
29**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
30
31**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
32
33**参数:**
34
35| 参数名 | 类型            | 必填 | 说明                                |
36| ------ | --------------- | ---- | ----------------------------------- |
37| curve  | [Curve](#curve) | 否   | 曲线类型。<br/>默认值:Curve.Linear |
38
39**返回值:**
40
41| 类型                           | 说明             |
42| ---------------------------------- | ---------------- |
43| [ICurve](#icurve9) | 曲线的插值对象。 |
44
45## Curve
46
47插值曲线和动效请参考<!--RP1-->[贝塞尔曲线](../../../design/ux-design/animation-attributes.md)<!--RP1End-->。
48
49**卡片能力:** 从API version 20开始,该接口支持在ArkTS卡片中使用。
50
51**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
52
53**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
54
55| 名称                | 值 | 说明                                                         |
56| ------------------- | -- | ------------------------------------------------------------ |
57| Linear              | 0 | 表示动画从头到尾的速度都是相同的。                           |
58| Ease                | 1 | 表示动画以低速开始,然后加快,在结束前变慢,cubic-bezier(0.25, 0.1, 0.25, 1.0)。 |
59| EaseIn              | 2 | 表示动画以低速开始,cubic-bezier(0.42, 0.0, 1.0, 1.0)。       |
60| EaseOut             | 3 | 表示动画以低速结束,cubic-bezier(0.0, 0.0, 0.58, 1.0)。       |
61| EaseInOut           | 4 | 表示动画以低速开始和结束,cubic-bezier(0.42, 0.0, 0.58, 1.0)。 |
62| FastOutSlowIn       | 5 | 标准曲线,cubic-bezier(0.4, 0.0, 0.2, 1.0)。                 |
63| LinearOutSlowIn     | 6 | 减速曲线,cubic-bezier(0.0, 0.0, 0.2, 1.0)。                 |
64| FastOutLinearIn     | 7 | 加速曲线,cubic-bezier(0.4, 0.0, 1.0, 1.0)。                 |
65| ExtremeDeceleration | 8 | 急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。                 |
66| Sharp               | 9 | 锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。               |
67| Rhythm              | 10 | 节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。                 |
68| Smooth              | 11 | 平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。                 |
69| Friction            | 12 | 阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。                  |
70
71**示例:**
72
73```ts
74import { curves } from '@kit.ArkUI';
75curves.initCurve(Curve.EaseIn) // 创建一个默认先慢后快插值曲线
76```
77
78
79## curves.stepsCurve<sup>9+</sup>
80
81stepsCurve(count: number, end: boolean): ICurve
82
83构造阶梯曲线对象。
84
85**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
86
87**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
88
89**参数:**
90
91| 参数名 | 类型    | 必填 | 说明                                                         |
92| ------ | ------- | ----| ------------------------------------------------------------ |
93| count  | number  | 是   | 阶梯的数量,需要为正整数。<br/>取值范围:[1, +∞)<br/>**说明:** <br/>设置小于1的值时,按值为1处理。 |
94| end    | boolean | 是   | 在每个间隔的起点或终点发生阶跃变化。<br>-true:在终点发生阶跃变化。<br>-false:在起点发生阶跃变化。 |
95
96**返回值:**
97
98| 类型                           | 说明             |
99| ---------------------------------- | ---------------- |
100| [ICurve](#icurve9) | 曲线的插值对象。 |
101
102**示例:**
103
104```ts
105import { curves } from '@kit.ArkUI';
106curves.stepsCurve(9, true)  //创建一个阶梯曲线
107```
108
109
110## curves.cubicBezierCurve<sup>9+</sup>
111
112cubicBezierCurve(x1: number, y1: number, x2: number, y2: number): ICurve
113
114构造三阶贝塞尔曲线对象,确保曲线的值在0到1之间。
115
116**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
117
118**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
119
120**参数:**
121
122| 参数名 | 类型   | 必填 | 说明                                                         |
123| ------ | ------ | ---- | ------------------------------------------------------------ |
124| x1     | number | 是   | 确定贝塞尔曲线第一点横坐标。<br/>取值范围:[0, 1]<br/>**说明:** <br/>设置的值小于0时,按0处理;设置的值大于1时,按1处理。 |
125| y1     | number | 是   | 确定贝塞尔曲线第一点纵坐标。<br/>取值范围:(-∞, +∞)          |
126| x2     | number | 是   | 确定贝塞尔曲线第二点横坐标。<br/>取值范围:[0, 1]<br/>**说明:** <br/>设置的值小于0时,按0处理;设置的值大于1时,按1处理。 |
127| y2     | number | 是   | 确定贝塞尔曲线第二点纵坐标。<br/>取值范围:(-∞, +∞)          |
128
129**返回值:**
130
131| 类型                           | 说明             |
132| ---------------------------------- | ---------------- |
133| [ICurve](#icurve9) | 曲线的插值对象。 |
134
135
136**示例:**
137
138```ts
139import { curves } from '@kit.ArkUI';
140curves.cubicBezierCurve(0.1, 0.0, 0.1, 1.0) // 创建一个三阶贝塞尔曲线
141```
142
143
144## curves.springCurve<sup>9+</sup>
145
146springCurve(velocity: number, mass: number, stiffness: number, damping: number): ICurve
147
148构造弹簧曲线对象,曲线形状由弹簧参数决定,动画时长受animation、animateTo中的duration参数控制。
149
150**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
151
152**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
153
154**参数:**
155| 参数名    | 类型   | 必填 | 说明                                                         |
156| --------- | ------ | ---- | ------------------------------------------------------------ |
157| velocity  | number | 是   | 初始速度。是由外部因素对弹性动效产生的影响参数,其目的是保证对象从之前的运动状态平滑的过渡到弹性动效。该速度是归一化速度,其值等于动画开始时的实际速度除以动画属性改变值。<br/>取值范围:(-∞, +∞) |
158| mass      | number | 是   | 质量。弹性系统的受力对象,会对弹性系统产生惯性影响。质量越大,震荡的幅度越大,恢复到平衡位置的速度越慢。<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置的值小于等于0时,按1处理。 |
159| stiffness | number | 是   | 刚度。是物体抵抗施加的力而形变的程度。在弹性系统中,刚度越大,抵抗变形的能力越强,恢复到平衡位置的速度就越快。<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置的值小于等于0时,按1处理。 |
160| damping   | number | 是   | 阻尼。用于描述系统在受到扰动后震荡及衰减的情形。阻尼越大,弹性运动的震荡次数越少、震荡幅度越小。<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置的值小于等于0时,按1处理。 |
161
162
163**返回值:**
164
165| 类型                           | 说明             |
166| ---------------------------------- | ---------------- |
167| [ICurve](#icurve9) | 曲线的插值对象。 |
168
169
170**示例:**
171
172```ts
173import { curves } from '@kit.ArkUI';
174curves.springCurve(10, 1, 228, 30) // 创建一个弹簧插值曲线
175```
176
177
178## curves.springMotion<sup>9+</sup>
179
180springMotion(response?: number, dampingFraction?: number, overlapDuration?: number): ICurve
181
182构造弹性动画曲线对象。如果对同一对象的同一属性进行多个弹性动画,每个动画会替换掉前一个动画,并继承之前的速度。
183
184**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
185
186**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
187
188**参数:**
189
190| 参数名       | 类型     | 必填   | 说明    |
191| --------- | ------ | ---- | ----- |
192| response  | number | 否    | 弹簧自然振动周期,决定弹簧复位的速度。<br>默认值:0.55<br/>单位:秒<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置小于等于0的值时,按默认值0.55处理。 |
193| dampingFraction      | number | 否    | 阻尼系数。<br>0表示无阻尼,一直处于震荡状态;<br>大于0小于1的值为欠阻尼,运动过程中会超出目标值;<br>等于1为临界阻尼;<br>大于1为过阻尼,运动过程中逐渐趋于目标值。<br>默认值:0.825<br/>单位:秒<br/>取值范围:[0, +∞)<br/>**说明:** <br/>设置小于0的值时,按默认值0.825处理。 |
194| overlapDuration | number | 否    | 弹性动画衔接时长。发生动画继承时,如果前后两个弹性动画response不一致,response参数会在overlapDuration时间内平滑过渡。<br/>默认值:0<br/>单位:秒<br/>取值范围:[0, +∞)<br/> **说明:**  <br/>设置小于0的值时,按默认值0处理。<br>弹性动画曲线为物理曲线,[animation](arkui-ts/ts-animatorproperty.md)、[animateTo](arkui-ts/ts-explicit-animation.md)、[pageTransition](arkui-ts/ts-page-transition-animation.md)中的duration参数不生效,动画持续时间取决于springMotion动画曲线参数和之前的速度。时间不能归一,故不能通过该曲线的interpolate函数获得插值。 |
195
196
197**返回值:**
198
199| 类型                           | 说明             |
200| ---------------------------------- | ---------------- |
201| [ICurve](#icurve9) | 曲线对象。<br>**说明:**  <br>弹性动画曲线为物理曲线,[animation](arkui-ts/ts-animatorproperty.md)、[animateTo](arkui-ts/ts-explicit-animation.md)、[pageTransition](arkui-ts/ts-page-transition-animation.md)中的duration参数不生效,动画持续时间取决于springMotion动画曲线参数和之前的速度。时间不能归一,故不能通过该曲线的[interpolate](#interpolate9)函数获得插值。 |
202
203**示例:**
204
205```ts
206import { curves } from '@kit.ArkUI'
207curves.springMotion() // 创建一个默认弹性动画曲线
208curves.springMotion(0.5) // 创建指定response、其余参数默认的弹性动画曲线
209curves.springMotion(0.5, 0.6) // 创建指定response和dampingFraction、其余参数默认的弹性动画曲线
210curves.springMotion(0.5, 0.6, 0) // 创建三个参数均自定义的弹性动画曲线
211```
212
213
214## curves.responsiveSpringMotion<sup>9+</sup>
215
216responsiveSpringMotion(response?: number, dampingFraction?: number, overlapDuration?: number): ICurve
217
218构造弹性跟手动画曲线对象,是[springMotion](#curvesspringmotion9)的一种特例,仅默认参数不同,可与springMotion混合使用。
219
220**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
221
222**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
223
224**参数:**
225
226| 参数名       | 类型     | 必填   | 说明    |
227| --------- | ------ | ---- | ----- |
228| response  | number | 否    | 解释同springMotion中的response。<br/>默认值:0.15<br/>单位:秒<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置小于等于0的值时,按默认值0.15处理。 |
229| dampingFraction      | number | 否    | 解释同springMotion中的dampingFraction。<br/>默认值:0.86<br/>单位:秒<br/>取值范围:[0, +∞)<br/>**说明:** <br/>设置小于0的值时,按默认值0.86处理。 |
230| overlapDuration | number | 否    | 解释同springMotion中的overlapDuration。<br/>默认值:0.25<br/>单位:秒<br/>取值范围:[0, +∞)<br/>**说明:** <br/>设置小于0的值时,按默认值0.25处理。<br/>弹性跟手动画曲线为springMotion的一种特例,仅默认值不同。如果使用自定义参数的弹性曲线,推荐使用springMotion构造曲线。如果使用跟手动画,推荐使用默认参数的弹性跟手动画曲线。<br/>[animation](arkui-ts/ts-animatorproperty.md)、[animateTo](arkui-ts/ts-explicit-animation.md)、[pageTransition](arkui-ts/ts-page-transition-animation.md)中的duration参数不生效,动画持续时间取决于responsiveSpringMotion动画曲线参数和之前的速度,也不能通过该曲线的interpolate函数获得插值。 |
231
232**返回值:**
233
234| 类型                           | 说明             |
235| ---------------------------------- | ---------------- |
236| [ICurve](#icurve9) | 曲线对象。<br>**说明:** <br>1、弹性跟手动画曲线为springMotion的一种特例,仅默认值不同。如果使用自定义参数的弹性曲线,推荐使用springMotion构造曲线;如果使用跟手动画,推荐使用默认参数的弹性跟手动画曲线。<br>2、[animation](arkui-ts/ts-animatorproperty.md)、[animateTo](arkui-ts/ts-explicit-animation.md)、[pageTransition](arkui-ts/ts-page-transition-animation.md)中的duration参数不生效,动画持续时间取决于responsiveSpringMotion动画曲线参数和之前的速度,也不能通过该曲线的[interpolate](#interpolate9)函数获得插值。 |
237
238**示例:**
239
240```ts
241import { curves } from '@kit.ArkUI'
242curves.responsiveSpringMotion() // 创建一个默认弹性跟手动画曲线
243```
244
245
246## curves.interpolatingSpring<sup>10+</sup>
247
248interpolatingSpring(velocity: number, mass: number, stiffness: number, damping: number): ICurve
249
250构造插值器弹簧曲线对象,生成一条从0到1的动画曲线,实际动画值根据曲线进行插值计算。动画时间由曲线参数决定,不受animation、animateTo中的duration参数控制。
251
252**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
253
254**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
255
256**参数:**
257| 参数名       | 类型     | 必填   | 说明    |
258| --------- | ------ | ---- | ----- |
259| velocity  | number | 是    | 初始速度。外部因素对弹性动效产生的影响参数,目的是保证对象从之前的运动状态平滑地过渡到弹性动效。该速度是归一化速度,其值等于动画开始时的实际速度除以动画属性改变值。<br/>取值范围:(-∞, +∞) |
260| mass      | number | 是    | 质量。弹性系统的受力对象,会对弹性系统产生惯性影响。质量越大,震荡的幅度越大,恢复到平衡位置的速度越慢。<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置的值小于等于0时,按1处理。 |
261| stiffness | number | 是    | 刚度。表示物体抵抗施加的力而形变的程度。刚度越大,抵抗变形的能力越强,恢复到平衡位置的速度越快。<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置的值小于等于0时,按1处理。 |
262| damping   | number | 是    | 阻尼。用于描述系统在受到扰动后震荡及衰减的情形。阻尼越大,弹性运动的震荡次数越少、震荡幅度越小。<br/>取值范围:(0, +∞)<br/>**说明:** <br/>设置的值小于等于0时,按1处理。 |
263
264**返回值:**
265
266| 类型                           | 说明             |
267| ---------------------------------- | ---------------- |
268| [ICurve](#icurve9) | 曲线对象。<br>**说明:** 弹性动画曲线为物理曲线,[animation](arkui-ts/ts-animatorproperty.md)、[animateTo](arkui-ts/ts-explicit-animation.md)、[pageTransition](arkui-ts/ts-page-transition-animation.md)中的duration参数不生效,动画持续时间取决于interpolatingSpring动画曲线参数。时间不能归一,故不能通过该曲线的[interpolate](#interpolate9)函数获得插值。 |
269
270**示例:**
271
272```ts
273import { curves } from '@kit.ArkUI'
274curves.interpolatingSpring(10, 1, 228, 30) // 创建一个时长由弹簧参数决定的弹簧插值曲线
275```
276
277## curves.customCurve<sup>10+</sup>
278
279customCurve(interpolate: (fraction: number) => number): ICurve
280
281构造自定义曲线对象。
282
283**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
284
285**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
286
287**参数:**
288
289| 参数名      | 类型                         | 必填 | 说明                                                         |
290| ----------- | ---------------------------- | ---- | ------------------------------------------------------------ |
291| interpolate | (fraction: number) => number | 是   | 用户自定义的插值回调函数。<br/>fraction为动画开始时的插值输入x值。取值范围:[0,1]<br/>返回值为曲线的y值。取值范围:[0,1]<br />**说明:**<br />fraction等于0时,返回值为0对应动画起点,返回不为0,动画在起点处有跳变效果。<br/>fraction等于1时,返回值为1对应动画终点,返回值不为1将导致动画的终值不是状态变量的值,出现大于或者小于状态变量值,再跳变到状态变量值的效果。 |
292
293**返回值:**
294
295| 类型               | 说明             |
296| ------------------ | ---------------- |
297| [ICurve](#icurve9) | 曲线的插值对象。 |
298
299**示例:**
300
301```ts
302import { curves } from '@kit.ArkUI'
303let interpolate = (fraction:number):number => {
304  return Math.sqrt(fraction)
305}
306let curve = curves.customCurve(interpolate) // 创建一个用户自定义插值曲线
307```
308
309## ICurve<sup>9+</sup>
310
311曲线对象,支持通过本模块中的[curves.cubicBezierCurve](#curvescubicbeziercurve9)、[curves.interpolatingSpring](#curvesinterpolatingspring10)等方法创建不同类型的曲线对象,并可通过曲线对象调用其[interpolate](#interpolate9)的成员方法。
312
313### interpolate<sup>9+</sup>
314
315interpolate(fraction:&nbsp;number): number
316
317插值曲线的插值计算函数,可以通过传入的归一化时间参数返回当前的插值
318
319**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
320
321**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
322
323**参数:**
324
325| 参数名   | 类型   | 必填 | 说明                                                         |
326| -------- | ------ | ---- | ------------------------------------------------------------ |
327| fraction | number | 是   | 当前的归一化时间参数。<br/>取值范围:[0,1]<br/>**说明:** <br/>设置的值小于0时,按0处理;设置的值大于1时,按1处理。 |
328
329**返回值:**
330
331| 类型   | 说明                                 |
332| ------ | ------------------------------------ |
333| number | 返回归一化time时间点对应的曲线插值。 |
334
335**示例:**
336
337```ts
338import { curves } from '@kit.ArkUI'
339let curveValue = curves.initCurve(Curve.EaseIn) // 创建一个默认先慢后快插值曲线
340let value: number = curveValue.interpolate(0.5) // 计算得到时间到一半时的插值
341```
342
343
344## curves.init<sup>(deprecated)</sup>
345
346init(curve?: Curve): string
347
348
349插值曲线的初始化函数,可以根据入参创建一个插值曲线对象,从API version9开始废弃,推荐使用[Curves.initCurve](#curvesinitcurve9)。
350
351**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
352
353**参数:**
354
355| 参数名 | 类型            | 必填 | 说明                                |
356| ------ | --------------- | ---- | ----------------------------------- |
357| curve  | [Curve](#curve) | 否   | 曲线类型。<br/>默认值:Curve.Linear |
358
359**返回值:**
360
361| 类型 | 说明 |
362| -------- | -------- |
363| string | 返回插值曲线对象。 |
364
365
366## curves.steps<sup>(deprecated)</sup>
367
368steps(count: number, end: boolean): string
369
370
371构造阶梯曲线对象,从API version9开始废弃,推荐使用[Curves. stepsCurve](#curvesstepscurve9)。
372
373**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
374
375**参数:**
376
377| 参数名 | 类型    | 必填 | 说明                                                         |
378| ------ | ------- | ----| ------------------------------------------------------------ |
379| count  | number  | 是   | 阶梯的数量,需要为正整数。                                   |
380| end    | boolean | 是   | 在每个间隔的起点或是终点发生阶跃变化。<br>-true:在终点发生阶跃变化。<br>-false:在起点发生阶跃变化。 |
381
382**返回值:**
383
384| 类型 | 说明 |
385| -------- | -------- |
386| string | 返回阶梯曲线对象。 |
387
388
389## curves.cubicBezier<sup>(deprecated)</sup>
390
391cubicBezier(x1: number, y1: number, x2: number, y2: number): string
392
393
394构造三阶贝塞尔曲线对象,曲线的值必须处于0-1之间,API version9开始废弃,推荐使用 [Curves.cubicBezierCurve](#curvescubicbeziercurve9)。
395
396**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
397
398**参数:**
399| 参数名  | 类型     | 必填   | 说明             |
400| ---- | ------ | ---- | -------------- |
401| x1   | number | 是    | 确定贝塞尔曲线第一点横坐标。 |
402| y1   | number | 是    | 确定贝塞尔曲线第一点纵坐标。 |
403| x2   | number | 是    | 确定贝塞尔曲线第二点横坐标。 |
404| y2   | number | 是    | 确定贝塞尔曲线第二点纵坐标。 |
405
406**返回值:**
407
408| 类型 | 说明 |
409| -------- | -------- |
410| string | 返回三阶贝塞尔曲线对象。 |
411
412
413## curves.spring<sup>(deprecated)</sup>
414
415spring(velocity: number, mass: number, stiffness: number, damping: number): string
416
417
418构造弹簧曲线对象,从API version9开始废弃,推荐使用[Curves.springCurve](#curvesspringcurve9)。
419
420**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
421
422**参数:**
423
424| 参数名       | 类型     | 必填   | 说明    |
425| --------- | ------ | ---- | ----- |
426| velocity  | number | 是    | 初始速度。是由外部因素对弹性动效产生的影响参数,其目的是保证对象从之前的运动状态平滑地过渡到弹性动效。 |
427| mass      | number | 是    | 质量。弹性系统的受力对象,会对弹性系统产生惯性影响。质量越大,震荡的幅度越大,恢复到平衡位置的速度越慢。 |
428| stiffness | number | 是    | 刚度。是物体抵抗施加的力而形变的程度。在弹性系统中,刚度越大,抵抗变形的能力越强,恢复到平衡位置的速度就越快。 |
429| damping   | number | 是    | 阻尼。是一个纯数,无真实的物理意义,用于描述系统在受到扰动后震荡及衰减的情形。阻尼越大,弹性运动的震荡次数越少、震荡幅度越小。 |
430
431**返回值:**
432
433| 类型 | 说明 |
434| -------- | -------- |
435| string | 返回弹簧曲线对象。 |
436
437## 整体示例
438
439```ts
440// xxx.ets
441import { curves } from '@kit.ArkUI';
442
443@Entry
444@Component
445struct ImageComponent {
446  @State widthSize: number = 200;
447  @State heightSize: number = 200;
448
449  build() {
450    Column() {
451      Text()
452        .margin({ top: 100 })
453        .width(this.widthSize)
454        .height(this.heightSize)
455        .backgroundColor(Color.Red)
456        .onClick(() => {
457          let curve = curves.cubicBezierCurve(0.25, 0.1, 0.25, 1.0);
458          this.widthSize = curve.interpolate(0.5) * this.widthSize;
459          this.heightSize = curve.interpolate(0.5) * this.heightSize;
460        })
461        .animation({ duration: 2000, curve: curves.stepsCurve(9, true) })
462    }.width("100%").height("100%")
463  }
464}
465```
466
467![zh-cn_image_0000001174104410](figures/zh-cn_image_0000001174104410.gif)
468