• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.arkui.componentUtils (componentUtils)
2
3提供获取组件绘制区域坐标和大小的能力。
4
5> **说明:**
6>
7> 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见[UIContext](./js-apis-arkui-UIContext.md#uicontext)说明。
10
11## 导入模块
12
13```ts
14import { componentUtils } from '@kit.ArkUI';
15```
16## componentUtils.getRectangleById<sup>(deprecated)</sup>
17
18getRectangleById(id: string): ComponentInfo
19
20根据组件ID获取组件实例对象,通过组件实例对象将获取的坐标位置和大小同步返回给开发者。
21
22> **说明:**
23>
24> 从API version 18开始废弃,建议使用[UIContext](js-apis-arkui-UIContext.md#uicontext)中的[getComponentUtils](js-apis-arkui-UIContext.md#getcomponentutils)获取[ComponentUtils](js-apis-arkui-UIContext.md#componentutils)实例,再通过此实例调用替代方法[getRectangleById](js-apis-arkui-UIContext.md#getrectanglebyid)。
25>
26> 从API version 10开始,可以通过使用[UIContext](js-apis-arkui-UIContext.md#uicontext)中的[getComponentUtils](js-apis-arkui-UIContext.md#getcomponentutils)方法获取当前UI上下文关联的[ComponentUtils](js-apis-arkui-UIContext.md#componentutils)对象。该接口需要在目标组件布局、完成以后获取目标组件区域大小信息,建议在[@ohos.arkui.inspector(布局回调)](js-apis-arkui-inspector.md)接收到布局完成的通知以后使用该接口。
27
28**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
29
30**系统能力:** SystemCapability.ArkUI.ArkUI.Full
31
32**参数:**
33
34| 参数名 | 类型   | 必填 | 说明       |
35| ------ | ------ | ---- | ---------- |
36| id     | string | 是   | 指定组件id。 |
37
38**返回值:**
39
40| 类型   | 说明       |
41| ------ | ---------- |
42| [ComponentInfo](#componentinfo) | 组件大小、位置、平移缩放旋转及仿射矩阵属性信息。 |
43
44**错误码:**
45
46以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)错误码。
47
48| 错误码ID  | 错误信息                |
49| ------ | ------------------- |
50| 100001 | UI execution context not found. |
51
52**示例:**
53
54```ts
55import { componentUtils } from '@kit.ArkUI';
56let modePosition:componentUtils.ComponentInfo = componentUtils.getRectangleById("onClick");
57```
58
59## ComponentInfo
60
61**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
62
63**系统能力:** SystemCapability.ArkUI.ArkUI.Full
64
65| 名称           | 类型             | 必填           | 说明                         |
66| ---------------|------------     | -----------------------------| -----------------------------|
67| size           | [Size](#size) | 是 | 组件大小。                    |
68| localOffset    | [Offset](#offset) | 是 | 组件相对于父组件信息。         |
69| windowOffset   | [Offset](#offset) | 是 | 组件相对于窗口信息。           |
70| screenOffset   | [Offset](#offset) | 是 | 组件相对于屏幕信息。           |
71| translate      | [TranslateResult](#translateresult) | 是 | 组件平移信息。                |
72| scale          | [ScaleResult](#scaleresult) | 是 | 组件缩放信息。                |
73| rotate         | [RotateResult](#rotateresult) | 是 | 组件旋转信息。                |
74| transform      | [Matrix4Result](#matrix4result) | 是 | 仿射矩阵信息,根据入参创建的四阶矩阵对象。  |
75
76### Size
77
78**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
79
80**系统能力:** SystemCapability.ArkUI.ArkUI.Full
81
82| 名称     | 类型 | 必填 | 说明                               |
83| -------- | ---- | ----------------------------------| ----------------------------------|
84| width    | number | 是 | 组件宽度。<br />单位: px                      |
85| height   | number | 是 | 组件高度。<br />单位: px                      |
86
87### Offset
88
89**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
90
91**系统能力:** SystemCapability.ArkUI.ArkUI.Full
92
93| 名称     | 类型 | 必填 | 说明                               |
94| --------| ---- | -----------------------------------| -----------------------------------|
95| x       | number | 是 | x点坐标。<br />单位: px                           |
96| y       | number | 是 | y点坐标。<br />单位: px                           |
97
98### TranslateResult
99
100**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
101
102**系统能力:** SystemCapability.ArkUI.ArkUI.Full
103
104| 名称     | 类型 | 必填 | 说明                               |
105| --------| ---- | -----------------------------------| -----------------------------------|
106| x       | number | 是 | x轴平移距离。<br />单位: px                       |
107| y       | number | 是 | y轴平移距离。<br />单位: px                       |
108| z       | number | 是 | z轴平移距离。<br />单位: px                       |
109
110### ScaleResult
111
112**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
113
114**系统能力:** SystemCapability.ArkUI.ArkUI.Full
115
116| 名称     | 类型 | 必填 | 说明                               |
117| --------| ---- | -----------------------------------| -----------------------------------|
118| x       | number | 是 | x轴缩放倍数。<br />单位: px                       |
119| y       | number | 是 | y轴缩放倍数。<br />单位: px                       |
120| z       | number | 是 | z轴缩放倍数。<br />单位: px                       |
121| centerX | number | 是 | 变换中心点x轴坐标。<br />单位: px                  |
122| centerY | number | 是 | 变换中心点y轴坐标。<br />单位: px                |
123
124### RotateResult
125
126**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
127
128**系统能力:** SystemCapability.ArkUI.ArkUI.Full
129
130| 名称     | 类型 | 必填 | 说明                               |
131| --------| ---- | -----------------------------------| -----------------------------------|
132| x       | number | 是 | 旋转轴向量x坐标。<br />单位: px                   |
133| y       | number | 是 | 旋转轴向量y坐标。<br />单位: px                   |
134| z       | number | 是 | 旋转轴向量z坐标。<br />单位: px                   |
135| angle   | number | 是 | 旋转角度。<br />单位: px                          |
136| centerX | number | 是 | 变换中心点x轴坐标。<br />单位: px                 |
137| centerY | number | 是 | 变换中心点y轴坐标。<br />单位: px                 |
138
139### Matrix4Result
140
141type Matrix4Result = [number,number,number,number,number,number,number,number,number,number,number,number,number,number,number,number]
142
143**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
144
145**系统能力:** SystemCapability.ArkUI.ArkUI.Full
146
147| 类型 | 说明                               |
148| --------| -----------------------------------|
149| [number,number,number,number,<br />number,number,number,number,<br />number,number,number,number,<br />number,number,number,number] | 取值范围为长度为16(4\*4)的number数组,&nbsp;详情见四阶矩阵说明。<br/>单位: px  |
150
151**四阶矩阵说明:**
152
153| 参数名 | 类型   | 必填 | 说明                                 |
154| ------ | ------ | ---- | ------------------------------------ |
155| m00    | number | 是   | x轴缩放值,单位矩阵默认为1。         |
156| m01    | number | 是   | 第2个值,xyz轴旋转会影响这个值。     |
157| m02    | number | 是   | 第3个值,xyz轴旋转会影响这个值。     |
158| m03    | number | 是   | 无实际意义。                         |
159| m10    | number | 是   | 第5个值,xyz轴旋转会影响这个值。     |
160| m11    | number | 是   | y轴缩放值,单位矩阵默认为1。         |
161| m12    | number | 是   | 第7个值,xyz轴旋转会影响这个值。     |
162| m13    | number | 是   | 无实际意义。                         |
163| m20    | number | 是   | 第9个值,xyz轴旋转会影响这个值。     |
164| m21    | number | 是   | 第10个值,xyz轴旋转会影响这个值。    |
165| m22    | number | 是   | z轴缩放值,单位矩阵默认为1。         |
166| m23    | number | 是   | 无实际意义。                         |
167| m30    | number | 是   | x轴平移值,单位px,单位矩阵默认为0。 |
168| m31    | number | 是   | y轴平移值,单位px,单位矩阵默认为0。 |
169| m32    | number | 是   | z轴平移值,单位px,单位矩阵默认为0。 |
170| m33    | number | 是   | 齐次坐标下生效,产生透视投影效果。   |
171
172**示例:**
173
174> **说明:**
175>
176> 推荐通过使用[UIContext](js-apis-arkui-UIContext.md#uicontext)中的[getComponentUtils](./js-apis-arkui-UIContext.md#getcomponentutils)方法获取当前UI上下文关联的ComponentUtils对象。
177
178  ```ts
179import { matrix4, componentUtils } from '@kit.ArkUI';
180
181@Entry
182@Component
183struct Utils {
184  @State x: number = 120;
185  @State y: number = 10;
186  @State z: number = 100;
187  @State value: string = '';
188  private matrix1 = matrix4.identity().translate({ x: this.x, y: this.y, z: this.z });
189
190  build() {
191    Column() {
192      Image($r("app.media.img"))
193        .transform(this.matrix1)
194        .translate({ x: 20, y: 20, z: 20 })
195        .scale({ x: 0.5, y: 0.5, z: 1 })
196        .rotate({
197          x: 1,
198          y: 1,
199          z: 1,
200          centerX: '50%',
201          centerY: '50%',
202          angle: 300
203        })
204        .width(300)
205        .height(100)
206        .key("image_01")
207      Button('getRectangleById')
208      .onClick(() => {
209        this.value = JSON.stringify(this.getUIContext().getComponentUtils().getRectangleById("image_01")) // 建议使用this.getUIContext().getComponentUtils()接口
210      }).margin(10).id('onClick')
211      Text(this.value)
212        .margin(20)
213        .width(300)
214        .height(300)
215        .borderWidth(2)
216    }.margin({left: 50})
217  }
218}
219  ```
220
221  ![componentget](figures/getRectangleById.gif)