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 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