XComponentNode

提供XComponent节点XComponentNode,表示组件树中的XComponent组件,用于EGL/OpenGLES和媒体数据写入,并支持动态修改节点渲染类型。

说明:

本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

当前不支持在预览器中使用XComponentNode。

导入模块

import { XComponentNode } from "@ohos.arkui.node";

XComponentNode

constructor

constructor(uiContext: UIContext, options: RenderOptions, id: string, type: XComponentType, libraryName?: string)

XComponentNode的构造函数。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
uiContext UIContext UI上下文,获取方式可参考UIContext获取方法
options RenderOptions XComponentNode的构造可选参数。
id string XComponent的唯一标识,支持最大的字符串长度128。详见XComponent组件
type XComponentType 用于指定XComponent组件类型。详见XComponent组件
libraryName string Native层编译输出动态库名称。详见XComponent组件

说明:

需要显式指定RenderOptions中的selfIdealSize,否则XComponentNode内容大小为空,不显示任何内容。

onCreate

onCreate(event?: Object): void

XComponentNode加载完成时触发该回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
event object 获取XComponent实例对象的context,context上挂载的方法由开发者在c++层定义。

onDestroy

onDestroy(): void

XComponentNode销毁时触发该回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

changeRenderType

changeRenderType(type: NodeRenderType): boolean

修改XComponentNode的渲染类型。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
type NodeRenderType 需要修改的渲染类型。

返回值:

类型 描述
boolean 修改渲染类型是否成功。

示例

import { NodeController, FrameNode, XComponentNode, NodeRenderType } from "@ohos.arkui.node"
import { UIContext } from '@ohos.arkui.UIContext';

class XComponentNodeController extends NodeController {
  private xComponentNode: MyXComponentNode | null = null;
  private soName: string = "tetrahedron_napi" // 该 so 由开发者通过 NAPI 编写并生成

  constructor() {
    super();
  }

  makeNode(context: UIContext): FrameNode | null {
    this.xComponentNode = new MyXComponentNode(context, {
      selfIdealSize: { width: 200, height: 200 }
    }, "xComponentId", XComponentType.SURFACE, this.soName);
    return this.xComponentNode;
  }

  changeRenderType(renderType: NodeRenderType): void {
    if (this.xComponentNode) {
      this.xComponentNode.changeRenderType(renderType);
    }
  }
}

class MyXComponentNode extends XComponentNode {
  onCreate(event: Object) {
    // do something when XComponentNode has created
  }

  onDestroy() {
    // do something when XComponentNode is destroying
  }
}

@Entry
@Component
struct Index {
  build() {
    Row() {
      Column() {
        NodeContainer(new XComponentNodeController())
      }
      .width('100%')
      .height('100%')
    }
    .height('100%')
  }
}

XComponentNodeSample

说明:

示例中的Native层编译输出动态库参考自OpenGL三棱椎(API10),生成完整示例需下载该工程后将cpp目录下所有文件拷贝至本工程cpp目录下。