• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 插值计算
2
3>  **说明:**
4> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
5
6
7## 导入模块
8
9```
10import curves from '@ohos.curves'
11```
12
13
14## 权限
15
1617
18
19## curves.init
20
21init(curve?: Curve): Object
22
23
24插值曲线的初始化函数,可以根据入参创建一个插值曲线对象。
25
26
27- 参数
28  | 参数名 | 类型 | 必填 | 默认值 | 说明 |
29  | -------- | -------- | -------- | -------- | -------- |
30  | curve | Curve | 否 | Linear | 曲线对象。 |
31
32- 返回值
33  曲线对象Object。
34
35
36## curves.steps
37
38steps(count: number, end: boolean): Object
39
40
41构造阶梯曲线对象。
42
43
44- 参数:
45  | 参数名 | 类型 | 必填 | 默认值 | 说明 |
46  | -------- | -------- | -------- | -------- | -------- |
47  | count | number | 是 | - | 阶梯的数量,需要为正整数。 |
48  | end | boolean | 是 | true | 在每个间隔的起点或是终点发生阶跃变化 ,默认值为true,即在终点发生阶跃变化。 |
49
50- 返回值
51  曲线对象Object。
52
53
54## curves.cubicBezier
55
56cubicBezier(x1: number, y1: number, x2: number, y2: number): Object
57
58
59构造三阶贝塞尔曲线对象,曲线的值必须处于0-1之间。
60
61
62- 参数
63  | 参数名 | 类型 | 必填 | 说明 |
64  | -------- | -------- | -------- | -------- |
65  | x1 | number | 是 | 确定贝塞尔曲线第一点横坐标。 |
66  | y1 | number | 是 | 确定贝塞尔曲线第一点纵坐标。 |
67  | x2 | number | 是 | 确定贝塞尔曲线第二点横坐标。 |
68  | y2 | number | 是 | 确定贝塞尔曲线第二点纵坐标。 |
69
70- 返回值
71  曲线对象Object。
72
73
74## curves.spring
75
76spring(velocity: number, mass: number, stiffness: number, damping: number): Object
77
78
79构造弹簧曲线对象。
80
81
82- 参数
83  | 参数名 | 类型 | 必填 | 说明 |
84  | -------- | -------- | -------- | -------- |
85  | velocity | number | 是 | 初始速度。 |
86  | mass | number | 是 | 质量。 |
87  | stiffness | number | 是 | 刚度。 |
88  | damping | number | 是 | 阻尼。 |
89
90- 返回值
91  曲线对象Object。
92
93
94## 示例
95
96```
97import Curves from '@ohos.curves'
98let curve1 = Curves.init() // 创建一个默认线性插值曲线
99let curve2 = Curves.init(Curve.EaseIn) // 创建一个默认先慢后快插值曲线
100let curve3 = Curves.spring(100, 1, 228, 30) // 创建一个弹簧插值曲线
101let curve3 = Curves.cubicBezier(0.1, 0.0, 0.1, 1.0) // 创建一个三阶贝塞尔曲线
102```
103
104
105曲线对象只能通过上面的接口创建。
106| 接口名称 | 功能描述 |
107| -------- | -------- |
108| interpolate(time:&nbsp;number):&nbsp;number | 插值曲线的插值计算函数,可以通过传入的归一化时间参数返回当前的插值。<br/>time:&nbsp;当前的归一化时间参数,有效值范围0到1。<br/>返回归一化time时间点对应的曲线插值。 |
109
110
111- 示例
112  ```
113  import Curves from '@ohos.curves'
114  let curve = Curves.init(Curve.EaseIn) // 创建一个默认先慢后快插值曲线
115  let value: number = curve.interpolate(0.5) // 计算得到时间到一半时的插值
116  ```
117
118
119## 整体示例
120
121```
122import Curves from '@ohos.curves'
123@Entry
124@Component
125struct ImageComponent {
126  @State widthSize: number = 200
127  @State heightSize: number = 200
128  build() {
129    Column() {
130      Text()
131        .margin({top:100})
132        .width(this.widthSize)
133        .height(this.heightSize)
134        .backgroundColor(Color.Red)
135        .onClick(()=> {
136          let curve = Curves.cubicBezier(0.25, 0.1, 0.25, 1.0);
137          this.widthSize = curve.interpolate(0.5) * this.widthSize;
138          this.heightSize = curve.interpolate(0.5) * this.heightSize;
139        })
140        .animation({duration: 2000 , curve: Curves.spring(0.25, 0.1, 0.25, 1.0)})
141    }.width("100%").height("100%")
142  }
143}
144```
145
146![zh-cn_image_0000001174104410](figures/zh-cn_image_0000001174104410.gif)
147