自定义渲染节点 (RenderNode)

介绍

对于不具备自己的渲染环境的三方框架,尽管已实现前端解析、布局及事件处理等功能,但仍需依赖系统的基础渲染和动画能力。FrameNode上的通用属性与通用事件对这类框架而言是冗余的,会导致多次不必要的操作,涵盖布局、事件处理等逻辑。

自定义渲染节点 (RenderNode)是更加轻量的渲染节点,仅具备与渲染相关的功能它提供了设置基础渲染属性的能力,以及节点的动态添加、删除和自定义绘制的能力。

本示例为 自定义渲染节点 (RenderNode) 的配套示例工程。

效果预览

首页 操作节点树 设置和获取渲染相关属性 自定义绘制
调整自定义绘制Canvas的变换矩阵 C++获取Canvas,并进行自定义绘制操作 设置标签 查询当前RenderNode是否解除引用

使用说明

  1. 在主界面,可以点击对应卡片,选择需要参考的示例。
  2. 进入示例界面,查看参考示例。
  3. 通过自动测试框架可进行测试及维护。

工程目录

entry/src/main/
├── cpp
│   ├── CMakeLists.txt
│   ├── native_bridge.cpp
│   └── types
│       └── libentry
│           └── Index.d.ts
└── ets
    ├── common
    │   ├── Card.ets
    │   ├── Route.ets
    │   └── resource.ets
    └── pages
        ├── CheckRenderNodeDisposed.ets
        ├── CustomDraw.ets
        ├── CustomDrawCanvas.ets
        ├── CustomDrawCanvasNative.ets
        ├── Index.ets
        ├── OperationNodeTree.ets
        ├── RenderingProperties.ets
        └── SetLabel.ets

具体实现

  1. 创建和删除节点。

    RenderNode提供了节点创建和删除的能力。可以通过RenderNode的构造函数创建自定义的RenderNode节点。通过构造函数创建的节点对应一个实体的节点。同时,可以通过RenderNode中的dispose接口来实现与实体节点的绑定关系的解除。

  2. 操作节点树。

    RenderNode提供了节点的增、删、查、改的能力,能够修改节点的子树结构;可以对所有RenderNode的节点的父子节点做出查询操作,并返回查询结果。

  3. 设置和获取渲染相关属性。

    RenderNode中可以设置渲染相关的属性,包括:backgroundColorclipToFrameopacitysizepositionframepivotscaletranslationrotationtransformshadowColorshadowOffsetshadowAlphashadowElevationshadowRadiusborderStyleborderWidthborderColorborderRadiusshapeMaskshapeClipmarkNodeGroup等。具体属性支持范围参考RenderNode接口说明。

  4. 自定义绘制。

    通过重写RenderNode中的draw方法,可以自定义RenderNode的绘制内容,通过invalidate接口可以主动触发节点的重新绘制。

  5. 调整自定义绘制Canvas的变换矩阵。

    从API version 12开始,通过重写RenderNode中的draw方法,可以自定义RenderNode的绘制内容。

    通过concatMatrix可以调整自定义绘制Canvas的变换矩阵。

相关权限

不涉及

依赖

不涉及

约束和限制

  1. 本示例支持标准系统上运行,支持设备:华为手机;

  2. 本示例支持API22版本SDK,版本号:6.0.2.54;

  3. 本示例已支持使DevEco Studio 5.1.1 Release (构建版本:5.1.1.840,构建 2025年10月20日)编译运行

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo ArkUISample/NativeType/CustomRenderNode > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master