创建自定义节点首先,准备好需要挂载的节点,代码如下所示。import { BuilderNode, FrameNode, NodeController } from '@kit.ArkUI'; class Params { text: string = 'Hello World'; constructor(text: string) { this.text = text; } } @Builder function buildText(params: Params) { Column() { Text(params.text) .fontSize(50) .fontWeight(FontWeight.Bold) .margin({bottom: 36}) } } ......实现NodeControllerNodeController为抽象类,需要继承并实现NodeController,代码如下所示。// ... class TextNodeController extends NodeController { private textNode: BuilderNode<[Params]> | null = null; private message: string = ''; constructor(message: string) { super(); this.message = message; } makeNode(context: UIContext): FrameNode | null { return null; } }实现NodeController的makeNode方法首先,使用构造函数创建BuilderNode实例。创建BuilderNode对象的时候必须要传入对应的UIContext对象。若BuilderNode作为RenderNode的子节点存在,要求设置RenderOptions的selfIdealSize属性。然后,使用BuilderNode的build方法,构建组件树。方法build()需要传入两个参数,第一个参数为通过wrapBuilder()封装的全局@Builder方法。第二个参数为对应的@Builder方法所需的参数对象。若@Builder方法不带参数或者存在默认参数,则build()的第二个参数可以不设置。// ... class TextNodeController extends NodeController { private textNode: BuilderNode<[Params]> | null = null; private message: string = ''; constructor(message: string) { super(); this.message = message; } makeNode(context: UIContext): FrameNode | null { // 创建BuilderNode实例 this.textNode = new BuilderNode(context); // 设置selfIdealSize属性 // this.textNode = new BuilderNode(context, {selfIdealSize: {width: 100, height :100}}); // 使用build方法构建组件树 this.textNode.build(wrapBuilder<[Params]>(buildText), new Params(this.message)); // 返回需要显示的节点 return this.textNode.getFrameNode(); } } ......显示自定义节点显示自定义节点依赖声明式渲染容器NodeContainer以及对应的控制类NodeController。NodeController的makeNode方法返回的节点会显示在对应的NodeContainer中。由于makeNode需要返回的为一个FrameNode,因此如果预期显示BuidlerNode的时候需要调用对应的BuidlerNode的getFrameNode的方法,获取其根节点,详细代码如上TextNodeController中所示。然后,在页面内新增声明式渲染容器NodeContainer,创建工具类NodeController。通过NodeController将MakeNode中返回的节点在声明式渲染容器中进行显示。// ... @Entry @Component struct Index { @State message: string = "hello"; private textNodeController: TextNodeController = new TextNodeController(this.message); build() { Row() { Column() { NodeContainer(this.textNodeController) .width('100%') .height(100) .backgroundColor('#FFF0F0F0') } .width('100%') .height('100%') } .height('100%') } }更新自定义节点更新自定义节点,可参考BuilderNode的update方法。本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
创建自定义节点
首先,准备好需要挂载的节点,代码如下所示。
实现NodeController
NodeController为抽象类,需要继承并实现NodeController,代码如下所示。
实现NodeController的makeNode方法
首先,使用构造函数创建BuilderNode实例。创建BuilderNode对象的时候必须要传入对应的UIContext对象。若BuilderNode作为RenderNode的子节点存在,要求设置RenderOptions的selfIdealSize属性。
然后,使用BuilderNode的build方法,构建组件树。方法build()需要传入两个参数,第一个参数为通过wrapBuilder()封装的全局@Builder方法。第二个参数为对应的@Builder方法所需的参数对象。若@Builder方法不带参数或者存在默认参数,则build()的第二个参数可以不设置。
显示自定义节点
显示自定义节点依赖声明式渲染容器NodeContainer以及对应的控制类NodeController。
NodeController的makeNode方法返回的节点会显示在对应的NodeContainer中。由于makeNode需要返回的为一个FrameNode,因此如果预期显示BuidlerNode的时候需要调用对应的BuidlerNode的getFrameNode的方法,获取其根节点,详细代码如上TextNodeController中所示。
然后,在页面内新增声明式渲染容器NodeContainer,创建工具类NodeController。通过NodeController将MakeNode中返回的节点在声明式渲染容器中进行显示。
更新自定义节点
更新自定义节点,可参考BuilderNode的update方法。
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。