鸿蒙 @ohos.arkui.node
在鸿蒙开发中,@ohos.arkui.node
模块提供了一系列用于构建和管理自定义节点的 API。这些 API 组织在一起,方便开发者进行导出和使用。本文将详细介绍 @ohos.arkui.node
模块的功能和使用方法。
一、模块功能概述
@ohos.arkui.node
模块提供了以下功能:
(一)BuilderNode 模块
- 功能:提供能够挂载原生组件的自定义节点
BuilderNode
。 - 注意事项:不建议将
BuilderNode
作为子节点挂载到其他自定义节点上。
(二)FrameNode 模块
- 功能:提供自定义节点
FrameNode
,表示组件树的实体节点。 - 使用方法:
NodeController
可通过BuilderNode
持有的FrameNode
将其挂载到NodeContainer
上,也可通过FrameNode
获取RenderNode
,挂载到其他FrameNode
上。
(三)NodeController 模块
- 功能:提供
NodeController
用于实现自定义节点的创建、显示、更新等操作。 - 使用方法:负责将自定义节点挂载到
NodeContainer
上。
(四)Graphics 模块
- 功能:提供自定义节点相关属性设置的定义。
(五)RenderNode 模块
- 功能:提供自绘制渲染节点
RenderNode
,支持开发者通过 C API 进行开发,完成自定义绘制需求。
(六)XComponentNode 模块
- 功能:提供
XComponent
节点XComponentNode
,表示组件树中的XComponent
组件。 - 使用场景:用于 EGL/OpenGLES 和媒体数据写入,并支持动态修改节点渲染类型。
二、使用 @ohos.arkui.node
(一)导入模块
在鸿蒙 Next 中,可以通过以下方式导入 @ohos.arkui.node
模块:
import {BuilderNode,NodeController,FrameNode,RenderNode,XComponentNode,NodeRenderType,RenderOptions,DrawContext,Size,Offset,Position,Pivot,Scale,Translation,Matrix4,Rotation,Frame
} from '@kit.ArkUI';
(二)创建自定义节点
以下是一个示例代码,展示如何创建自定义节点并挂载到 NodeContainer
上:
@Entry
@Component
struct CustomNodeExample {build() {Column() {// 创建自定义节点BuilderNode() {// 自定义节点的内容Text('This is a custom node').fontSize(20).textAlign(TextAlign.Center)}.id('customNode')}.width('100%').height('100%')}aboutToAppear() {// 获取 UIContextconst uiContext = this.getUIContext();const nodeController = new NodeController(uiContext);// 创建自定义节点const customNode = new BuilderNode('customNode');const frameNode = customNode.getFrameNode();// 将自定义节点挂载到 NodeContainernodeController.makeNode(frameNode, (node) => {nodeController.mount(node);});}
}
三、注意事项
- API 版本:
@ohos.arkui.node
模块的首批接口从 API version 11 开始支持。 - 预览器支持:当前不支持在预览器中使用自定义节点。
- UIContext 获取:可以通过以下方法获取
UIContext
:- 使用
ohos.window
中的getUIContext()
方法。 - 通过自定义组件的内置方法
getUIContext()
。 - 在
NodeController
的makeNode
回调方法中获取。
- 使用
四、总结
@ohos.arkui.node
模块为鸿蒙开发提供了强大的自定义节点功能,支持开发者创建、挂载和管理自定义节点。通过 BuilderNode
、FrameNode
和 NodeController
等模块,开发者可以实现复杂的自定义布局和交互效果。希望本文能帮助你更好地理解和使用 @ohos.arkui.node
模块。如果有任何问题或需要进一步讨论,欢迎随时交流!