• 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> 从API version 10开始,可以通过使用UIContext中的[getComponentUtils](./js-apis-arkui-UIContext.md#getcomponentutils)方法获取当前UI上下文关联的ComponentUtils对象。该接口需要在目标组件布局、完成以后获取目标组件区域大小信息,建议在[@ohos.arkui.inspector(布局回调)](js-apis-arkui-inspector.md)接收到布局完成的通知以后使用该接口。
12
13## 导入模块
14
15```ts
16import componentUtils from '@ohos.arkui.componentUtils'
17```
18## componentUtils.getRectangleById
19
20getRectangleById(id: string): ComponentInfo
21
22根据组件ID获取组件实例对象, 通过组件实例对象将获取的坐标位置和大小同步返回给开发者。
23
24**系统能力:** SystemCapability.ArkUI.ArkUI.Full
25
26**参数:**
27
28| 参数名 | 类型   | 必填 | 说明       |
29| ------ | ------ | ---- | ---------- |
30| id     | string | 是   | 指定组件id。 |
31
32**返回值:**
33
34| 类型   | 说明       |
35| ------ | ---------- |
36| [ComponentInfo](#componentinfo) | 组件大小、位置、平移缩放旋转及仿射矩阵属性信息。 |
37
38**示例:**
39
40```ts
41import componentUtils from '@ohos.arkui.componentUtils';
42let modePosition:componentUtils.ComponentInfo = componentUtils.getRectangleById("onClick");
43```
44
45## ComponentInfo
46
47**系统能力:** SystemCapability.ArkUI.ArkUI.Full
48
49| 名称           | 类型             | 必填           | 说明                         |
50| ---------------|------------     | -----------------------------| -----------------------------|
51| size           | [Size](#size) | 是 | 组件大小。                    |
52| localOffset    | [Offset](#offset) | 是 | 组件相对于父组件信息。         |
53| windowOffset   | [Offset](#offset) | 是 | 组件相对于窗口信息。           |
54| screenOffset   | [Offset](#offset) | 是 | 组件相对于屏幕信息。           |
55| translate      | [TranslateResult](#translateresult) | 是 | 组件平移信息。                |
56| scale          | [ScaleResult](#scaleresult) | 是 | 组件缩放信息。                |
57| rotate         | [RotateResult](#rotateresult) | 是 | 组件旋转信息。                |
58| transform      | [Matrix4Result](#matrix4result) | 是 | 仿射矩阵信息,根据入参创建的四阶矩阵对象。  |
59
60### Size
61
62**系统能力:** SystemCapability.ArkUI.ArkUI.Full
63
64| 名称     | 类型 | 必填 | 说明                               |
65| -------- | ---- | ----------------------------------| ----------------------------------|
66| width    | number | 是 | 组件宽度。<br />单位: px                      |
67| height   | number | 是 | 组件高度。<br />单位: px                      |
68
69### Offset
70
71**系统能力:** SystemCapability.ArkUI.ArkUI.Full
72
73| 名称     | 类型 | 必填 | 说明                               |
74| --------| ---- | -----------------------------------| -----------------------------------|
75| x       | number | 是 | x点坐标。<br />单位: px                           |
76| y       | number | 是 | y点坐标。<br />单位: px                           |
77
78### TranslateResult
79
80**系统能力:** SystemCapability.ArkUI.ArkUI.Full
81
82| 名称     | 类型 | 必填 | 说明                               |
83| --------| ---- | -----------------------------------| -----------------------------------|
84| x       | number | 是 | x轴平移距离。<br />单位: px                       |
85| y       | number | 是 | y轴平移距离。<br />单位: px                       |
86| z       | number | 是 | z轴平移距离。<br />单位: px                       |
87
88### ScaleResult
89
90**系统能力:** SystemCapability.ArkUI.ArkUI.Full
91
92| 名称     | 类型 | 必填 | 说明                               |
93| --------| ---- | -----------------------------------| -----------------------------------|
94| x       | number | 是 | x轴缩放倍数。<br />单位: px                       |
95| y       | number | 是 | y轴缩放倍数。<br />单位: px                       |
96| z       | number | 是 | z轴缩放倍数。<br />单位: px                       |
97| centerX | number | 是 | 变换中心点x轴坐标。<br />单位: px                  |
98| centerY | number | 是 | 变换中心点y轴坐标。<br />单位: px                |
99
100### RotateResult
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| angle   | number | 是 | 旋转角度。<br />单位: px                          |
110| centerX | number | 是 | 变换中心点x轴坐标。<br />单位: px                 |
111| centerY | number | 是 | 变换中心点y轴坐标。<br />单位: px                 |
112
113### Matrix4Result
114
115**系统能力:** SystemCapability.ArkUI.ArkUI.Full
116
117| 取值范围   | 说明                               |
118| --------| -----------------------------------|
119| [number,number,number,number,<br />number,number,number,number,<br />number,number,number,number,<br />number,number,number,number] | 取值范围为长度为16(4\*4)的number数组,&nbsp;详情见四阶矩阵说明,单位: px  |
120
121**四阶矩阵说明:**
122
123| 参数名 | 类型   | 必填 | 说明                                 |
124| ------ | ------ | ---- | ------------------------------------ |
125| m00    | number | 是   | x轴缩放值,单位矩阵默认为1。         |
126| m01    | number | 是   | 第2个值,xyz轴旋转会影响这个值。     |
127| m02    | number | 是   | 第3个值,xyz轴旋转会影响这个值。     |
128| m03    | number | 是   | 无实际意义。                         |
129| m10    | number | 是   | 第5个值,xyz轴旋转会影响这个值。     |
130| m11    | number | 是   | y轴缩放值,单位矩阵默认为1。         |
131| m12    | number | 是   | 第7个值,xyz轴旋转会影响这个值。     |
132| m13    | number | 是   | 无实际意义。                         |
133| m20    | number | 是   | 第9个值,xyz轴旋转会影响这个值。     |
134| m21    | number | 是   | 第10个值,xyz轴旋转会影响这个值。    |
135| m22    | number | 是   | z轴缩放值,单位矩阵默认为1。         |
136| m23    | number | 是   | 无实际意义。                         |
137| m30    | number | 是   | x轴平移值,单位px,单位矩阵默认为0。 |
138| m31    | number | 是   | y轴平移值,单位px,单位矩阵默认为0。 |
139| m32    | number | 是   | z轴平移值,单位px,单位矩阵默认为0。 |
140| m33    | number | 是   | 齐次坐标下生效,产生透视投影效果。   |
141
142**示例:**
143
144  ```ts
145import matrix4 from '@ohos.matrix4';
146import componentUtils from '@ohos.arkui.componentUtils';
147
148@Entry
149@Component
150struct Utils {
151  @State x: number = 120;
152  @State y: number = 10;
153  @State z: number = 100;
154  @State value: string = '';
155  private matrix1 = matrix4.identity().translate({ x: this.x, y: this.y, z: this.z });
156
157  build() {
158    Column() {
159      Image($r("app.media.img"))
160        .transform(this.matrix1)
161        .translate({ x: 20, y: 20, z: 20 })
162        .scale({ x: 0.5, y: 0.5, z: 1 })
163        .rotate({
164          x: 1,
165          y: 1,
166          z: 1,
167          centerX: '50%',
168          centerY: '50%',
169          angle: 300
170        })
171        .width(300)
172        .height(100)
173        .key("image_01")
174      Button('getRectangleById')
175      .onClick(() => {
176        this.value = JSON.stringify(componentUtils.getRectangleById("image_01"))
177      }).margin(10).id('onClick')
178      Text(this.value)
179        .margin(20)
180        .width(300)
181        .height(300)
182        .borderWidth(2)
183    }.margin({left: 50})
184  }
185}
186  ```
187
188  ![componentget](figures/getRectangleById.gif)