鸿蒙 @ohos.arkui.node
鸿蒙 @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() {
// 获取 UIContext
const uiContext = this.getUIContext();
const nodeController = new NodeController(uiContext);
// 创建自定义节点
const customNode = new BuilderNode('customNode');
const frameNode = customNode.getFrameNode();
// 将自定义节点挂载到 NodeContainer
nodeController.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
模块。如果有任何问题或需要进一步讨论,欢迎随时交流!