• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# XComponentNode
2<!--deprecated_code_no_check-->
3
4提供XComponent节点XComponentNode,表示组件树中的[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent),用于[EGL](../native-lib/egl.md)/[OpenGLES](../native-lib/opengles.md)和媒体数据写入,并支持动态修改节点渲染类型。
5
6> **说明:** 从API version 12开始,该接口不再维护,推荐使用[XComponent类型typeNode](./js-apis-arkui-frameNode.md#xcomponent12)的方式实现。
7>
8> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
9>
10> 当前不支持在预览器中使用XComponentNode。
11
12## 导入模块
13
14```ts
15import { XComponentNode } from "@kit.ArkUI";
16```
17
18## XComponentNode
19
20### constructor
21
22constructor(uiContext: UIContext, options: RenderOptions, id: string, type: XComponentType, libraryName?: string)
23
24XComponentNode的构造函数。
25
26**系统能力:** SystemCapability.ArkUI.ArkUI.Full
27
28**参数:**
29
30| 参数名      | 类型                                                         | 必填 | 说明                                                         |
31| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
32| uiContext   | [UIContext](js-apis-arkui-UIContext.md)                      | 是   | UI上下文,获取方式可参考[UIContext获取方法](./js-apis-arkui-node.md#uicontext获取方法)。 |
33| options     | [RenderOptions](./js-apis-arkui-builderNode.md#renderoptions) | 是   | XComponentNode的构造可选参数。                               |
34| id          | string                                                       | 是   | XComponent的唯一标识,支持最大的字符串长度128。详见[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent)。 |
35| type        | [XComponentType](arkui-ts/ts-appendix-enums.md#xcomponenttype10) | 是   | 用于指定XComponent组件类型。详见[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent)。 |
36| libraryName | string                                                       | 否   | Native层编译输出动态库名称。详见[XComponent组件](arkui-ts/ts-basic-components-xcomponent.md#xcomponent)。 |
37
38> **说明:**
39>
40> 需要显式指定[RenderOptions](./js-apis-arkui-builderNode.md#renderoptions)中的selfIdealSize,否则XComponentNode内容大小为空,不显示任何内容。
41
42### onCreate
43
44onCreate(event?: Object): void
45
46XComponentNode加载完成时触发该回调。
47
48**系统能力:** SystemCapability.ArkUI.ArkUI.Full
49
50**参数:**
51
52| 参数名 | 类型   | 必填 | 说明                                                         |
53| ------ | ------ | ---- | ------------------------------------------------------------ |
54| event  | Object | 否   | 获取XComponent实例对象的context,context上挂载的方法由开发者在c++层定义。 |
55
56### onDestroy
57
58onDestroy(): void
59
60XComponentNode销毁时触发该回调。
61
62**系统能力:** SystemCapability.ArkUI.ArkUI.Full
63
64### changeRenderType
65
66changeRenderType(type: NodeRenderType): boolean
67
68修改XComponentNode的渲染类型。
69
70**系统能力:** SystemCapability.ArkUI.ArkUI.Full
71
72**参数:**
73
74| 参数名 | 类型                                                     | 必填 | 说明             |
75| ------ | ------------------------------------------------------------ | ---- | ------------------ |
76| type   | [NodeRenderType](./js-apis-arkui-builderNode.md#noderendertype) | 是 | 需要修改的渲染类型。 |
77
78**返回值:**
79
80| 类型 | 描述                   |
81| ---- | ---------------------- |
82| boolean | 修改渲染类型是否成功。 |
83
84## 示例
85
86```ts
87import { NodeController, FrameNode, XComponentNode, NodeRenderType, UIContext} from '@kit.ArkUI'
88
89class XComponentNodeController extends NodeController {
90  private xComponentNode: MyXComponentNode | null = null;
91  private soName: string = "tetrahedron_napi" // 该 so 由开发者通过 NAPI 编写并生成
92
93  constructor() {
94    super();
95  }
96
97  makeNode(context: UIContext): FrameNode | null {
98    this.xComponentNode = new MyXComponentNode(context, {
99      selfIdealSize: { width: 200, height: 200 }
100    }, "xComponentId", XComponentType.SURFACE, this.soName);
101    return this.xComponentNode;
102  }
103
104  changeRenderType(renderType: NodeRenderType): void {
105    if (this.xComponentNode) {
106      this.xComponentNode.changeRenderType(renderType);
107    }
108  }
109}
110
111class MyXComponentNode extends XComponentNode {
112  onCreate(event: Object) {
113    // do something when XComponentNode has created
114  }
115
116  onDestroy() {
117    // do something when XComponentNode is destroying
118  }
119}
120
121@Entry
122@Component
123struct Index {
124  build() {
125    Row() {
126      Column() {
127        NodeContainer(new XComponentNodeController())
128      }
129      .width('100%')
130      .height('100%')
131    }
132    .height('100%')
133  }
134}
135```
136
137![XComponentNodeSample](figures/xcomponent_node.jpg)
138
139<!--Del-->
140> **说明:**
141>
142> 示例中的Native层编译输出动态库参考自[OpenGL三棱椎(API10)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Native/NdkOpenGL),生成完整示例需下载该工程后将cpp目录下所有文件拷贝至本工程cpp目录下。
143<!--DelEnd-->
144