• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# RenderNode
2
3提供自绘制渲染节点RenderNode,支持开发者通过C API进行开发,完成自定义绘制需求。
4
5> **说明:**
6>
7> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8>
9> 当前不支持在预览器中使用RenderNode。
10>
11> 不建议对BuilderNode中的RenderNode进行修改操作。
12
13## 导入模块
14
15```ts
16import { RenderNode } from '@kit.ArkUI';
17```
18
19## RenderNode
20
21### constructor
22
23constructor()
24
25RenderNode的构造函数。
26
27**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
28
29**系统能力:** SystemCapability.ArkUI.ArkUI.Full
30
31**示例:**
32
33```ts
34import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
35
36const renderNode = new RenderNode();
37renderNode.frame = { x: 0, y: 0, width: 100, height: 100 };
38renderNode.backgroundColor = 0xffff0000;
39
40class MyNodeController extends NodeController {
41  private rootNode: FrameNode | null = null;
42
43  makeNode(uiContext: UIContext): FrameNode | null {
44    this.rootNode = new FrameNode(uiContext);
45
46    const rootRenderNode = this.rootNode.getRenderNode();
47    if (rootRenderNode !== null) {
48      rootRenderNode.appendChild(renderNode);
49    }
50
51    return this.rootNode;
52  }
53}
54
55@Entry
56@Component
57struct Index {
58  private myNodeController: MyNodeController = new MyNodeController();
59
60  build() {
61    Row() {
62      NodeContainer(this.myNodeController)
63    }
64  }
65}
66```
67
68### appendChild
69
70appendChild(node: RenderNode): void
71
72在RenderNode最后一个子节点后添加新的子节点。
73
74**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
75
76**系统能力:** SystemCapability.ArkUI.ArkUI.Full
77
78**参数:**
79
80| 参数名 | 类型                      | 必填 | 说明                   |
81| ------ | ------------------------- | ---- | ---------------------- |
82| node   | [RenderNode](#rendernode) | 是   | 需要添加的RenderNode。 |
83
84**示例:**
85
86```ts
87import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
88
89const renderNode = new RenderNode();
90renderNode.frame = { x: 0, y: 0, width: 100, height: 100 };
91renderNode.backgroundColor = 0xffff0000;
92const child = new RenderNode();
93child.frame = { x: 10, y: 10, width: 50, height: 50 };
94child.backgroundColor = 0xff00ff00;
95renderNode.appendChild(child);
96
97class MyNodeController extends NodeController {
98  private rootNode: FrameNode | null = null;
99
100  makeNode(uiContext: UIContext): FrameNode | null {
101    this.rootNode = new FrameNode(uiContext);
102
103    const rootRenderNode = this.rootNode.getRenderNode();
104    if (rootRenderNode !== null) {
105      rootRenderNode.appendChild(renderNode);
106    }
107
108    return this.rootNode;
109  }
110}
111
112@Entry
113@Component
114struct Index {
115  private myNodeController: MyNodeController = new MyNodeController();
116
117  build() {
118    Row() {
119      NodeContainer(this.myNodeController)
120    }
121  }
122}
123```
124
125### insertChildAfter
126
127insertChildAfter(child: RenderNode, sibling: RenderNode | null): void
128
129在RenderNode指定子节点之后添加新的子节点。
130
131**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
132
133**系统能力:** SystemCapability.ArkUI.ArkUI.Full
134
135**参数:**
136
137| 参数名  | 类型                                        | 必填 | 说明                                                                         |
138| ------- | ------------------------------------------- | ---- | ---------------------------------------------------------------------------- |
139| child   | [RenderNode](#rendernode)                   | 是   | 需要添加的子节点。                                                           |
140| sibling | [RenderNode](#rendernode) \| null | 是   | 新节点将插入到该节点之后。若该参数设置为空,则新节点将插入到首个子节点之前。 |
141
142**示例:**
143
144```ts
145import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
146
147const renderNode = new RenderNode();
148renderNode.frame = { x: 0, y: 0, width: 200, height: 350 };
149renderNode.backgroundColor = 0xffff0000;
150for (let i = 0; i < 5; i++) {
151  const node = new RenderNode();
152  node.frame = { x: 10, y: 10 + 60 * i, width: 50, height: 50 };
153  node.backgroundColor = 0xff00ff00;
154  renderNode.appendChild(node);
155}
156
157const child = new RenderNode();
158child.frame = { x: 70, y: 70, width: 50, height: 50 };
159child.backgroundColor = 0xffffff00;
160const sibling = renderNode.getChild(1);
161renderNode.insertChildAfter(child, sibling);
162
163class MyNodeController extends NodeController {
164  private rootNode: FrameNode | null = null;
165
166  makeNode(uiContext: UIContext): FrameNode | null {
167    this.rootNode = new FrameNode(uiContext);
168
169    const rootRenderNode = this.rootNode.getRenderNode();
170    if (rootRenderNode !== null) {
171      rootRenderNode.appendChild(renderNode);
172    }
173
174    return this.rootNode;
175  }
176}
177
178@Entry
179@Component
180struct Index {
181  private myNodeController: MyNodeController = new MyNodeController();
182
183  build() {
184    Row() {
185      NodeContainer(this.myNodeController)
186    }
187  }
188}
189```
190
191### removeChild
192
193removeChild(node: RenderNode): void
194
195从RenderNode中删除指定的子节点。
196
197**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
198
199**系统能力:** SystemCapability.ArkUI.ArkUI.Full
200
201**参数:**
202
203| 参数名 | 类型                      | 必填 | 说明               |
204| ------ | ------------------------- | ---- | ------------------ |
205| node   | [RenderNode](#rendernode) | 是   | 需要删除的子节点。 |
206
207**示例:**
208```ts
209import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
210
211const renderNode = new RenderNode();
212renderNode.frame = { x: 0, y: 0, width: 200, height: 350 };
213renderNode.backgroundColor = 0xffff0000;
214for (let i = 0; i < 5; i++) {
215  const node = new RenderNode();
216  node.frame = { x: 10, y: 10 + 60 * i, width: 50, height: 50 };
217  node.backgroundColor = 0xff00ff00;
218  renderNode.appendChild(node);
219}
220
221const node = renderNode.getChild(1);
222renderNode.removeChild(node);
223
224class MyNodeController extends NodeController {
225  private rootNode: FrameNode | null = null;
226
227  makeNode(uiContext: UIContext): FrameNode | null {
228    this.rootNode = new FrameNode(uiContext);
229
230    const rootRenderNode = this.rootNode.getRenderNode();
231    if (rootRenderNode !== null) {
232      rootRenderNode.appendChild(renderNode);
233    }
234
235    return this.rootNode;
236  }
237}
238
239@Entry
240@Component
241struct Index {
242  private myNodeController: MyNodeController = new MyNodeController();
243
244  build() {
245    Row() {
246      NodeContainer(this.myNodeController)
247    }
248  }
249}
250```
251### clearChildren
252
253clearChildren(): void
254
255清除当前RenderNode的所有子节点。
256
257**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
258
259**系统能力:** SystemCapability.ArkUI.ArkUI.Full
260
261**示例:**
262
263```ts
264import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
265
266const renderNode = new RenderNode();
267renderNode.size = { width: 200, height: 300 };
268for (let i = 0; i < 10; i++) {
269  let childNode = new RenderNode();
270  childNode.size = { width: i * 10, height: i * 10 };
271  childNode.position = { x: i * 10, y: i * 10 };
272  childNode.backgroundColor = 0xFF0000FF - 0X11 * i;
273  renderNode.appendChild(childNode);
274}
275
276class MyNodeController extends NodeController {
277  private rootNode: FrameNode | null = null;
278
279  makeNode(uiContext: UIContext): FrameNode | null {
280    this.rootNode = new FrameNode(uiContext);
281
282    const rootRenderNode = this.rootNode.getRenderNode();
283    if (rootRenderNode !== null) {
284      rootRenderNode.appendChild(renderNode);
285    }
286
287    return this.rootNode;
288  }
289}
290
291@Entry
292@Component
293struct Index {
294  private myNodeController: MyNodeController = new MyNodeController();
295
296  build() {
297    Column() {
298      NodeContainer(this.myNodeController)
299        .borderWidth(1)
300        .width(200)
301        .height(300)
302      Button("clearChildren")
303        .onClick(() => {
304          renderNode.clearChildren();
305        })
306    }.width("100%")
307  }
308}
309```
310
311### getChild
312
313getChild(index: number): RenderNode | null
314
315获取当前节点指定位置的子节点。
316
317**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
318
319**系统能力:** SystemCapability.ArkUI.ArkUI.Full
320
321**参数:**
322
323| 参数名  | 类型    | 必填 | 说明               |
324| ------- | ------- | ---- | ------------------ |
325| index | number | 是   | 需要查询的子节点的序列号。 |
326
327**返回值:**
328
329| 类型                              | 说明                                                       |
330| --------------------------------- | ---------------------------------------------------------- |
331| [RenderNode](#rendernode) \| null | 子节点。若该RenderNode不包含所查询的子节点,则返回空对象null。 |
332
333**示例:**
334
335```ts
336import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
337
338const renderNode = new RenderNode();
339renderNode.size = { width: 200, height: 300 };
340for (let i = 0; i < 10; i++) {
341  let childNode = new RenderNode();
342  childNode.size = { width: i * 10, height: i * 10 };
343  childNode.position = { x: i * 10, y: i * 10 };
344  childNode.backgroundColor = 0xFF0000FF - 0X11 * i;
345  renderNode.appendChild(childNode);
346}
347
348class MyNodeController extends NodeController {
349  private rootNode: FrameNode | null = null;
350
351  makeNode(uiContext: UIContext): FrameNode | null {
352    this.rootNode = new FrameNode(uiContext);
353
354    const rootRenderNode = this.rootNode.getRenderNode();
355    if (rootRenderNode !== null) {
356      rootRenderNode.appendChild(renderNode);
357    }
358
359    return this.rootNode;
360  }
361}
362
363@Entry
364@Component
365struct Index {
366  private myNodeController: MyNodeController = new MyNodeController();
367
368  build() {
369    Column() {
370      NodeContainer(this.myNodeController)
371        .borderWidth(1)
372        .width(200)
373        .height(300)
374      Button("getChild")
375        .onClick(() => {
376          for (let i = 0; i < 11; i++) {
377            let childNode: RenderNode | null = renderNode.getChild(i);
378            if (childNode == null) {
379              console.log(`the ${i} of renderNode's childNode is null`);
380            } else {
381              console.log(`the ${i} of renderNode's childNode has a size of {${childNode.size.width},${childNode.size.height}}`);
382            }
383          }
384
385        })
386    }.width("100%")
387  }
388}
389```
390
391### getFirstChild
392
393getFirstChild(): RenderNode | null
394
395获取当前RenderNode的第一个子节点。
396
397**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
398
399**系统能力:** SystemCapability.ArkUI.ArkUI.Full
400
401**返回值:**
402
403| 类型                              | 说明                                                       |
404| --------------------------------- | ---------------------------------------------------------- |
405| [RenderNode](#rendernode) \| null | 首个子节点。若该RenderNode不包含子节点,则返回空对象null。 |
406
407**示例:**
408
409```ts
410import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
411
412const renderNode = new RenderNode();
413renderNode.frame = { x: 0, y: 0, width: 200, height: 350 };
414renderNode.backgroundColor = 0xffff0000;
415for (let i = 0; i < 5; i++) {
416  const node = new RenderNode();
417  node.frame = { x: 10, y: 10 + 60 * i, width: 50, height: 50 };
418  node.backgroundColor = 0xff00ff00;
419  renderNode.appendChild(node);
420}
421
422class MyNodeController extends NodeController {
423  private rootNode: FrameNode | null = null;
424
425  makeNode(uiContext: UIContext): FrameNode | null {
426    this.rootNode = new FrameNode(uiContext);
427
428    const rootRenderNode = this.rootNode.getRenderNode();
429    if (rootRenderNode !== null) {
430      rootRenderNode.appendChild(renderNode);
431    }
432
433    return this.rootNode;
434  }
435}
436
437@Entry
438@Component
439struct Index {
440  private myNodeController: MyNodeController = new MyNodeController();
441
442  build() {
443    Row() {
444      NodeContainer(this.myNodeController)
445        .width(200)
446        .height(350)
447      Button('getFirstChild')
448        .onClick(() => {
449          const firstChild = renderNode.getFirstChild();
450          if (firstChild === null) {
451            console.log('the fist child is null');
452          } else {
453            console.log(`the position of fist child is x: ${firstChild.position.x}, y: ${firstChild.position.y}`);
454          }
455        })
456    }
457  }
458}
459```
460
461### getNextSibling
462
463getNextSibling(): RenderNode | null
464
465获取当前RenderNode的下一个同级节点。
466
467**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
468
469**系统能力:** SystemCapability.ArkUI.ArkUI.Full
470
471**返回值:**
472
473| 类型                              | 说明                                                                                   |
474| --------------------------------- | -------------------------------------------------------------------------------------- |
475| [RenderNode](#rendernode) \| null | 当前RenderNode的下一个同级节点。若该RenderNode不包含下一个同级节点,则返回空对象null。 |
476
477**示例:**
478```ts
479import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
480
481const renderNode = new RenderNode();
482renderNode.frame = { x: 0, y: 0, width: 200, height: 350 };
483renderNode.backgroundColor = 0xffff0000;
484for (let i = 0; i < 5; i++) {
485  const node = new RenderNode();
486  node.frame = { x: 10, y: 10 + 60 * i, width: 50, height: 50 };
487  node.backgroundColor = 0xff00ff00;
488  renderNode.appendChild(node);
489}
490
491class MyNodeController extends NodeController {
492  private rootNode: FrameNode | null = null;
493
494  makeNode(uiContext: UIContext): FrameNode | null {
495    this.rootNode = new FrameNode(uiContext);
496
497    const rootRenderNode = this.rootNode.getRenderNode();
498    if (rootRenderNode !== null) {
499      rootRenderNode.appendChild(renderNode);
500    }
501
502    return this.rootNode;
503  }
504}
505
506@Entry
507@Component
508struct Index {
509  private myNodeController: MyNodeController = new MyNodeController();
510
511  build() {
512    Row() {
513      NodeContainer(this.myNodeController)
514        .width(200)
515        .height(350)
516      Button('getNextSibling')
517        .onClick(() => {
518          const child = renderNode.getChild(1);
519          const nextSibling = child!.getNextSibling()
520          if (child === null || nextSibling === null) {
521            console.log('the child or nextChild is null');
522          } else {
523            console.log(`the position of child is x: ${child.position.x}, y: ${child.position.y}, ` +
524              `the position of nextSibling is x: ${nextSibling.position.x}, y: ${nextSibling.position.y}`);
525          }
526        })
527    }
528  }
529}
530```
531
532### getPreviousSibling
533
534getPreviousSibling(): RenderNode | null
535
536获取当前RenderNode的上一个同级节点。
537
538**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
539
540**系统能力:** SystemCapability.ArkUI.ArkUI.Full
541
542**返回值:**
543
544| 类型                              | 说明                                                                                   |
545| --------------------------------- | -------------------------------------------------------------------------------------- |
546| [RenderNode](#rendernode) \| null | 当前RenderNode的上一个同级节点。若该RenderNode不包含上一个同级节点,则返回空对象null。 |
547
548**示例:**
549```ts
550import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
551
552const renderNode = new RenderNode();
553renderNode.frame = { x: 0, y: 0, width: 200, height: 350 };
554renderNode.backgroundColor = 0xffff0000;
555for (let i = 0; i < 5; i++) {
556  const node = new RenderNode();
557  node.frame = { x: 10, y: 10 + 60 * i, width: 50, height: 50 };
558  node.backgroundColor = 0xff00ff00;
559  renderNode.appendChild(node);
560}
561
562class MyNodeController extends NodeController {
563  private rootNode: FrameNode | null = null;
564
565  makeNode(uiContext: UIContext): FrameNode | null {
566    this.rootNode = new FrameNode(uiContext);
567
568    const rootRenderNode = this.rootNode.getRenderNode();
569    if (rootRenderNode !== null) {
570      rootRenderNode.appendChild(renderNode);
571    }
572
573    return this.rootNode;
574  }
575}
576
577@Entry
578@Component
579struct Index {
580  private myNodeController: MyNodeController = new MyNodeController();
581
582  build() {
583    Row() {
584      NodeContainer(this.myNodeController)
585        .width(200)
586        .height(350)
587      Button('getPreviousSibling')
588        .onClick(() => {
589          const child = renderNode.getChild(1);
590          const previousSibling = child!.getPreviousSibling()
591          if (child === null || previousSibling === null) {
592            console.log('the child or previousChild is null');
593          } else {
594            console.log(`the position of child is x: ${child.position.x}, y: ${child.position.y}, ` +
595              `the position of previousSibling is x: ${previousSibling.position.x}, y: ${previousSibling.position.y}`);
596          }
597        })
598    }
599  }
600}
601```
602
603### backgroundColor
604
605set backgroundColor(color: number)
606
607设置当前RenderNode的背景颜色。
608
609**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
610
611**系统能力:** SystemCapability.ArkUI.ArkUI.Full
612
613**参数:**
614
615| 参数名 | 类型   | 必填 | 说明                   |
616| ------ | ------ | ---- | ---------------------- |
617| color  | number | 是   | 背景颜色值,ARGB格式,示例:0xE5E5E5。 |
618
619get backgroundColor(): number
620
621获取当前RenderNode的背景颜色。
622
623**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
624
625**系统能力:** SystemCapability.ArkUI.ArkUI.Full
626
627**返回值:**
628
629| 类型   | 说明                                           |
630| ------ | ---------------------------------------------- |
631| number | 当前RenderNode的背景颜色,默认值为0X00000000。 |
632
633**示例:**
634```ts
635import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
636
637const renderNode = new RenderNode();
638renderNode.frame = { x: 0, y: 0, width: 100, height: 100 };
639renderNode.backgroundColor = 0XFF00FF00;
640const backgroundColor = renderNode.backgroundColor;
641
642class MyNodeController extends NodeController {
643  private rootNode: FrameNode | null = null;
644
645  makeNode(uiContext: UIContext): FrameNode | null {
646    this.rootNode = new FrameNode(uiContext);
647
648    const rootRenderNode = this.rootNode.getRenderNode();
649    if (rootRenderNode !== null) {
650      rootRenderNode.appendChild(renderNode);
651    }
652
653    return this.rootNode;
654  }
655}
656
657@Entry
658@Component
659struct Index {
660  private myNodeController: MyNodeController = new MyNodeController();
661  build() {
662    Row() {
663      NodeContainer(this.myNodeController)
664    }
665  }
666}
667```
668
669### clipToFrame
670
671set clipToFrame(useClip: boolean)
672
673设置是否对当前RenderNode剪裁。若设置为true,则超出该RenderNode大小的部分将会被截断。
674
675**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
676
677**系统能力:** SystemCapability.ArkUI.ArkUI.Full
678
679**参数:**
680
681| 参数名  | 类型    | 必填 | 说明               |
682| ------- | ------- | ---- | ------------------ |
683| useClip | boolean | 是   | 设置是否进行剪裁。<br/>true表示对当前RenderNode剪裁,false表示不对当前RenderNode剪裁。 |
684
685get clipToFrame(): boolean
686
687获取当前RenderNode是否需要进行剪裁。
688
689**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
690
691**系统能力:** SystemCapability.ArkUI.ArkUI.Full
692
693**返回值:**
694
695| 类型    | 说明                                                |
696| ------- | --------------------------------------------------- |
697| boolean | 获取当前RenderNode是否需要进行剪裁,默认值为true。<br/>true表示对当前RenderNode剪裁,false表示不对当前RenderNode剪裁。 |
698
699**示例:**
700```ts
701import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
702
703const renderNode = new RenderNode();
704renderNode.frame = { x: 0, y: 0, width: 100, height: 100 };
705renderNode.backgroundColor = 0xffff0000;
706renderNode.clipToFrame = true;
707const clipToFrame = renderNode.clipToFrame;
708
709const childNode = new RenderNode();
710childNode.frame = { x: 10, y: 10, width: 150, height: 50 };
711childNode.backgroundColor = 0xffffff00;
712renderNode.appendChild(childNode);
713
714class MyNodeController extends NodeController {
715  private rootNode: FrameNode | null = null;
716
717  makeNode(uiContext: UIContext): FrameNode | null {
718    this.rootNode = new FrameNode(uiContext);
719
720    const rootRenderNode = this.rootNode.getRenderNode();
721    if (rootRenderNode !== null) {
722      rootRenderNode.appendChild(renderNode);
723    }
724
725    return this.rootNode;
726  }
727}
728
729@Entry
730@Component
731struct Index {
732  private myNodeController: MyNodeController = new MyNodeController();
733
734  build() {
735    Row() {
736      NodeContainer(this.myNodeController)
737    }
738  }
739}
740```
741
742### opacity
743
744set opacity(value: number)
745
746设置当前RenderNode的不透明度。若输入的数值小于0,会被视为0。若输入的数值大于1,会被视为1。
747
748**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
749
750**系统能力:** SystemCapability.ArkUI.ArkUI.Full
751
752**参数:**
753
754| 参数名 | 类型   | 必填 | 说明                                   |
755| ------ | ------ | ---- | -------------------------------------- |
756| value  | number | 是   | 将要设置的不透明度,数据范围为[0, 1],值越大透明度越低。 |
757
758get opacity(): number
759
760获取当前RenderNode的不透明度。
761
762**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
763
764**系统能力:** SystemCapability.ArkUI.ArkUI.Full
765
766**返回值:**
767
768| 类型   | 说明                                      |
769| ------ | ----------------------------------------- |
770| number | 获取当前RenderNode的不透明度,默认值为1,不透明。 |
771
772**示例:**
773```ts
774import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
775
776const renderNode = new RenderNode();
777renderNode.frame = { x: 0, y: 0, width: 100, height: 100 };
778renderNode.backgroundColor = 0xffff0000;
779renderNode.opacity = 0.5;
780const opacity = renderNode.opacity;
781
782class MyNodeController extends NodeController {
783  private rootNode: FrameNode | null = null;
784
785  makeNode(uiContext: UIContext): FrameNode | null {
786    this.rootNode = new FrameNode(uiContext);
787
788    const rootRenderNode = this.rootNode.getRenderNode();
789    if (rootRenderNode !== null) {
790      rootRenderNode.appendChild(renderNode);
791    }
792
793    return this.rootNode;
794  }
795}
796
797@Entry
798@Component
799struct Index {
800  private myNodeController: MyNodeController = new MyNodeController();
801
802  build() {
803    Row() {
804      NodeContainer(this.myNodeController)
805    }
806  }
807}
808```
809
810### size
811
812set size(size: Size)
813
814设置当前RenderNode的大小。
815
816**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
817
818**系统能力:** SystemCapability.ArkUI.ArkUI.Full
819
820**参数:**
821
822| 参数名 | 类型                                     | 必填 | 说明                         |
823| ------ | ---------------------------------------- | ---- | ---------------------------- |
824| size   | [Size](./js-apis-arkui-graphics.md#size) | 是   | 将要设置的RenderNode的大小。 |
825
826get size(): Size
827
828获取当前RenderNode的大小。
829
830**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
831
832**系统能力:** SystemCapability.ArkUI.ArkUI.Full
833
834**返回值:**
835
836| 名称                                     | 说明                                            |
837| ---------------------------------------- | ----------------------------------------------- |
838| [Size](./js-apis-arkui-graphics.md#size) | 获取当前RenderNode的大小,默认值宽度和高度为0。 |
839
840**示例:**
841```ts
842import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
843
844const renderNode = new RenderNode();
845renderNode.backgroundColor = 0xffff0000;
846renderNode.size = { width: 100, height: 100 };
847const size = renderNode.size;
848
849class MyNodeController extends NodeController {
850  private rootNode: FrameNode | null = null;
851
852  makeNode(uiContext: UIContext): FrameNode | null {
853    this.rootNode = new FrameNode(uiContext);
854
855    const rootRenderNode = this.rootNode.getRenderNode();
856    if (rootRenderNode !== null) {
857      rootRenderNode.appendChild(renderNode);
858    }
859
860    return this.rootNode;
861  }
862}
863
864@Entry
865@Component
866struct Index {
867  private myNodeController: MyNodeController = new MyNodeController();
868
869  build() {
870    Row() {
871      NodeContainer(this.myNodeController)
872    }
873  }
874}
875```
876
877### position
878
879set position(position: Position)
880
881设置当前RenderNode的位置。
882
883**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
884
885**系统能力:** SystemCapability.ArkUI.ArkUI.Full
886
887**参数:**
888
889| 参数名   | 类型                                             | 必填 | 说明                         |
890| -------- | ------------------------------------------------ | ---- | ---------------------------- |
891| position | [Position](./js-apis-arkui-graphics.md#position) | 是   | 将要设置的RenderNode的位置。 |
892
893get position(): Position
894
895获取当前RenderNode的位置。
896
897**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
898
899**系统能力:** SystemCapability.ArkUI.ArkUI.Full
900
901**返回值:**
902
903| 类型                                             | 说明                                                 |
904| ------------------------------------------------ | ---------------------------------------------------- |
905| [Position](./js-apis-arkui-graphics.md#position) | 获取当前RenderNode的位置,默认位置为{ x: 0, y: 0 }。 |
906
907**示例:**
908```ts
909import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
910
911const renderNode = new RenderNode();
912renderNode.backgroundColor = 0xffff0000;
913renderNode.size = { width: 100, height: 100 };
914renderNode.position = { x: 10, y: 10 };
915const position = renderNode.position;
916
917class MyNodeController extends NodeController {
918  private rootNode: FrameNode | null = null;
919
920  makeNode(uiContext: UIContext): FrameNode | null {
921    this.rootNode = new FrameNode(uiContext);
922
923    const rootRenderNode = this.rootNode.getRenderNode();
924    if (rootRenderNode !== null) {
925      rootRenderNode.appendChild(renderNode);
926    }
927
928    return this.rootNode;
929  }
930}
931
932@Entry
933@Component
934struct Index {
935  private myNodeController: MyNodeController = new MyNodeController();
936
937  build() {
938    Row() {
939      NodeContainer(this.myNodeController)
940    }
941  }
942}
943```
944
945### frame
946
947set frame(frame: Frame)
948
949设置当前RenderNode的大小和位置。当和[position](#position)、[size](#size)同时使用时,以后设置的为准。
950
951**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
952
953**系统能力:** SystemCapability.ArkUI.ArkUI.Full
954
955**参数:**
956
957| 参数名 | 类型                                       | 必填 | 说明                             |
958| ------ | ------------------------------------------ | ---- | -------------------------------- |
959| frame  | [Frame](./js-apis-arkui-graphics.md#frame) | 是   | 将要设置的RenderNode的大小和位置。 |
960
961get frame(): Frame
962
963获取当前RenderNode的大小和位置。
964
965**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
966
967**系统能力:** SystemCapability.ArkUI.ArkUI.Full
968
969**返回值:**
970
971| 类型            | 说明                                                                          |
972| --------------- | ----------------------------------------------------------------------------- |
973| [Frame](#frame) | 获取当前RenderNode的大小和位置,默认值为{ x: 0, y: 0, width: 0, height: 0 }。 |
974
975**示例:**
976```ts
977import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
978
979const renderNode = new RenderNode();
980renderNode.backgroundColor = 0xffff0000;
981renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
982const frame = renderNode.frame;
983
984class MyNodeController extends NodeController {
985  private rootNode: FrameNode | null = null;
986
987  makeNode(uiContext: UIContext): FrameNode | null {
988    this.rootNode = new FrameNode(uiContext);
989
990    const rootRenderNode = this.rootNode.getRenderNode();
991    if (rootRenderNode !== null) {
992      rootRenderNode.appendChild(renderNode);
993    }
994
995    return this.rootNode;
996  }
997}
998
999@Entry
1000@Component
1001struct Index {
1002  private myNodeController: MyNodeController = new MyNodeController();
1003
1004  build() {
1005    Row() {
1006      NodeContainer(this.myNodeController)
1007    }
1008  }
1009}
1010```
1011
1012### pivot
1013
1014set pivot(pivot: Pivot)
1015
1016设置当前RenderNode的轴心,影响RenderNode的缩放和旋转效果。
1017
1018**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1019
1020**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1021
1022**参数:**
1023
1024| 参数名 | 类型                                       | 必填 | 说明                         |
1025| ------ | ------------------------------------------ | ---- | ---------------------------- |
1026| pivot  | [Pivot](./js-apis-arkui-graphics.md#pivot) | 是   | 将要设置的RenderNode的轴心。 |
1027
1028get pivot(): Pivot
1029
1030获取当前RenderNode的轴心。
1031
1032**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1033
1034**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1035
1036**返回值:**
1037
1038| 类型                                       | 说明                                                  |
1039| ------------------------------------------ | ----------------------------------------------------- |
1040| [Pivot](./js-apis-arkui-graphics.md#pivot) | 获取当前RenderNode的轴心,默认值为{ x: 0.5, y: 0.5}。 |
1041
1042**示例:**
1043```ts
1044import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1045
1046const renderNode = new RenderNode();
1047renderNode.backgroundColor = 0xffff0000;
1048renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1049renderNode.pivot = { x: 0.5, y: 0.6 };
1050const pivot = renderNode.pivot;
1051
1052renderNode.rotation = { x: 15, y: 0, z: 0 };
1053
1054class MyNodeController extends NodeController {
1055  private rootNode: FrameNode | null = null;
1056
1057  makeNode(uiContext: UIContext): FrameNode | null {
1058    this.rootNode = new FrameNode(uiContext);
1059
1060    const rootRenderNode = this.rootNode.getRenderNode();
1061    if (rootRenderNode !== null) {
1062      rootRenderNode.appendChild(renderNode);
1063    }
1064
1065    return this.rootNode;
1066  }
1067}
1068
1069@Entry
1070@Component
1071struct Index {
1072  private myNodeController: MyNodeController = new MyNodeController();
1073
1074  build() {
1075    Row() {
1076      NodeContainer(this.myNodeController)
1077    }
1078  }
1079}
1080```
1081
1082### scale
1083
1084set scale(scale: Scale)
1085
1086设置当前RenderNode的比例。
1087
1088**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1089
1090**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1091
1092**参数:**
1093
1094| 参数名 | 类型                                       | 必填 | 说明                             |
1095| ------ | ------------------------------------------ | ---- | -------------------------------- |
1096| scale  | [Scale](./js-apis-arkui-graphics.md#scale) | 是   | 将要设置的RenderNode的缩放比例。 |
1097
1098get scale(): Scale
1099
1100获取当前RenderNode的比例。
1101
1102**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1103
1104**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1105
1106**返回值:**
1107
1108| 类型                                       | 说明                                               |
1109| ------------------------------------------ | -------------------------------------------------- |
1110| [Scale](./js-apis-arkui-graphics.md#scale) | 获取当前RenderNode的比例,默认值为{ x: 1, y: 1 }。 |
1111
1112**示例:**
1113```ts
1114import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1115
1116const renderNode = new RenderNode();
1117renderNode.backgroundColor = 0xffff0000;
1118renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1119renderNode.scale = { x: 0.5, y: 1 };
1120const scale = renderNode.scale;
1121
1122class MyNodeController extends NodeController {
1123  private rootNode: FrameNode | null = null;
1124
1125  makeNode(uiContext: UIContext): FrameNode | null {
1126    this.rootNode = new FrameNode(uiContext);
1127
1128    const rootRenderNode = this.rootNode.getRenderNode();
1129    if (rootRenderNode !== null) {
1130      rootRenderNode.appendChild(renderNode);
1131    }
1132
1133    return this.rootNode;
1134  }
1135}
1136
1137@Entry
1138@Component
1139struct Index {
1140  private myNodeController: MyNodeController = new MyNodeController();
1141
1142  build() {
1143    Row() {
1144      NodeContainer(this.myNodeController)
1145    }
1146  }
1147}
1148```
1149
1150### translation
1151
1152set translation(translation: Translation)
1153
1154设置当前RenderNode的平移量。
1155
1156**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1157
1158**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1159
1160**参数:**
1161
1162| 参数名      | 类型                                                   | 必填 | 说明                           |
1163| ----------- | ------------------------------------------------------ | ---- | ------------------------------ |
1164| translation | [Translation](./js-apis-arkui-graphics.md#translation) | 是   | 将要设置的RenderNode的平移量。 |
1165
1166get translation(): Translation
1167
1168获取当前RenderNode的平移量。
1169
1170**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1171
1172**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1173
1174**返回值:**
1175
1176| 类型                                                   | 说明                                                 |
1177| ------------------------------------------------------ | ---------------------------------------------------- |
1178| [Translation](./js-apis-arkui-graphics.md#translation) | 获取当前RenderNode的平移量,默认值为{ x: 0, y: 0 }。 |
1179
1180**示例:**
1181```ts
1182import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1183
1184const renderNode = new RenderNode();
1185renderNode.backgroundColor = 0xffff0000;
1186renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1187renderNode.translation = { x: 100, y: 0 };
1188const translation = renderNode.translation;
1189
1190class MyNodeController extends NodeController {
1191  private rootNode: FrameNode | null = null;
1192
1193  makeNode(uiContext: UIContext): FrameNode | null {
1194    this.rootNode = new FrameNode(uiContext);
1195
1196    const rootRenderNode = this.rootNode.getRenderNode();
1197    if (rootRenderNode !== null) {
1198      rootRenderNode.appendChild(renderNode);
1199    }
1200
1201    return this.rootNode;
1202  }
1203}
1204
1205@Entry
1206@Component
1207struct Index {
1208  private myNodeController: MyNodeController = new MyNodeController();
1209
1210  build() {
1211    Row() {
1212      NodeContainer(this.myNodeController)
1213    }
1214  }
1215}
1216```
1217
1218### rotation
1219
1220set rotation(rotation: Rotation)
1221
1222设置当前RenderNode的旋转角度。
1223
1224**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1225
1226**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1227
1228**参数:**
1229
1230| 参数名   | 类型                                             | 必填 | 说明                             |
1231| -------- | ------------------------------------------------ | ---- | -------------------------------- |
1232| rotation | [Rotation](./js-apis-arkui-graphics.md#rotation) | 是   | 将要设置的RenderNode的旋转角度。 |
1233
1234get rotation(): Rotation
1235
1236获取当前RenderNode的旋转角度。
1237
1238**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1239
1240**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1241
1242**返回值:**
1243
1244| 类型                                             | 说明                                                    |
1245| ------------------------------------------------ | ------------------------------------------------------- |
1246| [Rotation](./js-apis-arkui-graphics.md#rotation) | 当前RenderNode的旋转角度。默认值为{ x: 0, y: 0, z: 0}。 |
1247
1248**示例:**
1249```ts
1250import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1251
1252const renderNode = new RenderNode();
1253renderNode.backgroundColor = 0xffff0000;
1254renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1255renderNode.rotation = { x: 45, y: 0, z: 0 };
1256const rotation = renderNode.rotation;
1257
1258class MyNodeController extends NodeController {
1259  private rootNode: FrameNode | null = null;
1260
1261  makeNode(uiContext: UIContext): FrameNode | null {
1262    this.rootNode = new FrameNode(uiContext);
1263
1264    const rootRenderNode = this.rootNode.getRenderNode();
1265    if (rootRenderNode !== null) {
1266      rootRenderNode.appendChild(renderNode);
1267    }
1268
1269    return this.rootNode;
1270  }
1271}
1272
1273@Entry
1274@Component
1275struct Index {
1276  private myNodeController: MyNodeController = new MyNodeController();
1277
1278  build() {
1279    Row() {
1280      NodeContainer(this.myNodeController)
1281    }
1282  }
1283}
1284```
1285
1286### transform
1287
1288set transform(transform: Matrix4)
1289
1290设置当前RenderNode的变换矩阵。
1291
1292**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1293
1294**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1295
1296**参数:**
1297
1298| 参数名    | 类型                                           | 必填 | 说明                             |
1299| --------- | ---------------------------------------------- | ---- | -------------------------------- |
1300| transform | [Matrix4](./js-apis-arkui-graphics.md#matrix4) | 是   | 将要设置的RenderNode的变换矩阵。 |
1301
1302get transform(): Matrix4
1303
1304获取当前RenderNode的变换矩阵。默认值为:
1305```ts
1306[
1307  1, 0, 0, 0,
1308  0, 1, 0, 0,
1309  0, 0, 1, 0,
1310  0, 0, 0, 1
1311]
1312```
1313
1314**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1315
1316**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1317
1318**返回值:**
1319
1320| 类型                                           | 说明                       |
1321| ---------------------------------------------- | -------------------------- |
1322| [Matrix4](./js-apis-arkui-graphics.md#matrix4) | 当前RenderNode的变换矩阵。 |
1323
1324**示例:**
1325```ts
1326import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1327
1328const renderNode = new RenderNode();
1329renderNode.backgroundColor = 0xffff0000;
1330renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1331renderNode.transform = [
1332  1, 0, 0, 0,
1333  0, 2, 0, 0,
1334  0, 0, 1, 0,
1335  0, 0, 0, 1
1336];
1337const transform = renderNode.transform;
1338
1339class MyNodeController extends NodeController {
1340  private rootNode: FrameNode | null = null;
1341
1342  makeNode(uiContext: UIContext): FrameNode | null {
1343    this.rootNode = new FrameNode(uiContext);
1344
1345    const rootRenderNode = this.rootNode.getRenderNode();
1346    if (rootRenderNode !== null) {
1347      rootRenderNode.appendChild(renderNode);
1348    }
1349
1350    return this.rootNode;
1351  }
1352}
1353
1354@Entry
1355@Component
1356struct Index {
1357  private myNodeController: MyNodeController = new MyNodeController();
1358
1359  build() {
1360    Row() {
1361      NodeContainer(this.myNodeController)
1362    }
1363  }
1364}
1365```
1366
1367### shadowColor
1368
1369set shadowColor(color: number)
1370
1371设置当前RenderNode的阴影颜色,ARGB格式。若设置了[shadowAlpha](#shadowalpha),则不透明度以shadowAlpha为准。
1372
1373**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1374
1375**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1376
1377**参数:**
1378
1379| 参数名 | 类型   | 必填 | 说明                                       |
1380| ------ | ------ | ---- | ------------------------------------------ |
1381| color  | number | 是   | 将要设置的RenderNode的阴影颜色,ARGB格式。<br/>取值范围是符合ARGB格式的颜色。 |
1382
1383get shadowColor(): number
1384
1385获取当前RenderNode的阴影颜色。
1386
1387**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1388
1389**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1390
1391**返回值:**
1392
1393| 类型   | 说明                                                     |
1394| ------ | -------------------------------------------------------- |
1395| number | 当前RenderNode的阴影颜色,ARGB格式,默认值为0X00000000。 |
1396
1397**示例:**
1398```ts
1399import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1400
1401const renderNode = new RenderNode();
1402renderNode.backgroundColor = 0xffff0000;
1403renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1404renderNode.shadowElevation = 10;
1405renderNode.shadowColor = 0XFF00FF00;
1406const shadowColor = renderNode.shadowColor;
1407
1408class MyNodeController extends NodeController {
1409  private rootNode: FrameNode | null = null;
1410
1411  makeNode(uiContext: UIContext): FrameNode | null {
1412    this.rootNode = new FrameNode(uiContext);
1413
1414    const rootRenderNode = this.rootNode.getRenderNode();
1415    if (rootRenderNode !== null) {
1416      rootRenderNode.appendChild(renderNode);
1417    }
1418
1419    return this.rootNode;
1420  }
1421}
1422
1423@Entry
1424@Component
1425struct Index {
1426  private myNodeController: MyNodeController = new MyNodeController();
1427
1428  build() {
1429    Row() {
1430      NodeContainer(this.myNodeController)
1431    }
1432  }
1433}
1434```
1435
1436### shadowOffset
1437
1438set shadowOffset(offset: Offset)
1439
1440设置当前RenderNode的阴影偏移。
1441
1442**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1443
1444**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1445
1446**参数:**
1447
1448| 参数名 | 类型                                         | 必填 | 说明                             |
1449| ------ | -------------------------------------------- | ---- | -------------------------------- |
1450| offset | [Offset](./js-apis-arkui-graphics.md#offset) | 是   | 将要设置的RenderNode的阴影偏移。 |
1451
1452get shadowOffset(): Offset
1453
1454获取当前RenderNode的阴影偏移。
1455
1456**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1457
1458**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1459
1460**返回值:**
1461
1462| 类型                                         | 说明                                               |
1463| -------------------------------------------- | -------------------------------------------------- |
1464| [Offset](./js-apis-arkui-graphics.md#offset) | 当前RenderNode的阴影偏移,默认值为{ x: 0, y: 0 }。 |
1465
1466**示例:**
1467
1468```ts
1469import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1470
1471const renderNode = new RenderNode();
1472renderNode.backgroundColor = 0xffff0000;
1473renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1474renderNode.shadowElevation = 10;
1475renderNode.shadowColor = 0XFF00FF00;
1476renderNode.shadowOffset = { x: 10, y: 10 };
1477const shadowOffset = renderNode.shadowOffset;
1478
1479class MyNodeController extends NodeController {
1480  private rootNode: FrameNode | null = null;
1481
1482  makeNode(uiContext: UIContext): FrameNode | null {
1483    this.rootNode = new FrameNode(uiContext);
1484
1485    const rootRenderNode = this.rootNode.getRenderNode();
1486    if (rootRenderNode !== null) {
1487      rootRenderNode.appendChild(renderNode);
1488    }
1489
1490    return this.rootNode;
1491  }
1492}
1493
1494@Entry
1495@Component
1496struct Index {
1497  private myNodeController: MyNodeController = new MyNodeController();
1498
1499  build() {
1500    Row() {
1501      NodeContainer(this.myNodeController)
1502    }
1503  }
1504}
1505```
1506
1507### label<sup>12+</sup>
1508
1509set label(label: string)
1510
1511设置当前RenderNode的标签。若当前节点是通过new创建的RenderNode,则设置的标签信息会在节点Inspector信息的属性中。
1512
1513**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1514
1515**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1516
1517**参数:**
1518
1519| 参数名 | 类型   | 必填 | 说明                                      |
1520| ------ | ------ | ---- | ----------------------------------------- |
1521| label  | string | 是   | 将要设置的RenderNode的标签。 |
1522
1523get label(): string
1524
1525获取当前RenderNode的标签。
1526
1527**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1528
1529**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1530
1531**返回值:**
1532
1533| 类型   | 说明                                           |
1534| ------ | ---------------------------------------------- |
1535| string | 当前RenderNode的标签,默认值为""。 |
1536
1537**示例:**
1538
1539```ts
1540import {  RenderNode, FrameNode, NodeController, UIContext } from '@kit.ArkUI';
1541
1542class MyNodeController extends NodeController {
1543  private rootNode: FrameNode | null = null;
1544
1545  makeNode(uiContext: UIContext): FrameNode | null {
1546    this.rootNode = new FrameNode(uiContext);
1547    const renderNode: RenderNode | null = this.rootNode.getRenderNode();
1548    if (renderNode !== null) {
1549      const renderChildNode: RenderNode = new RenderNode();
1550      renderChildNode.frame = { x: 0, y: 0, width: 100, height: 100 };
1551      renderChildNode.backgroundColor = 0xffff0000;
1552      renderChildNode.label = 'customRenderChildNode';
1553      console.log('label:', renderChildNode.label);
1554      renderNode.appendChild(renderChildNode);
1555    }
1556
1557    return this.rootNode;
1558  }
1559}
1560
1561@Entry
1562@Component
1563struct Index {
1564  private myNodeController: MyNodeController = new MyNodeController();
1565
1566  build() {
1567    Column() {
1568      NodeContainer(this.myNodeController)
1569        .width(300)
1570        .height(700)
1571        .backgroundColor(Color.Gray)
1572    }
1573  }
1574}
1575```
1576### shadowAlpha
1577
1578set shadowAlpha(alpha: number)
1579
1580设置当前RenderNode的阴影颜色的Alpha值。
1581
1582**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1583
1584**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1585
1586**参数:**
1587
1588| 参数名 | 类型   | 必填 | 说明                                      |
1589| ------ | ------ | ---- | ----------------------------------------- |
1590| alpha  | number | 是   | 将要设置的RenderNode的阴影颜色的Alpha值。<br/> 取值范围是alpha值。 |
1591
1592get shadowAlpha(): number
1593
1594获取当前RenderNode的阴影颜色的Alpha值。
1595
1596**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1597
1598**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1599
1600**返回值:**
1601
1602| 类型   | 说明                                           |
1603| ------ | ---------------------------------------------- |
1604| number | 当前RenderNode的阴影颜色的Alpha值,默认值为0。 |
1605
1606**示例:**
1607
1608```ts
1609import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1610
1611const renderNode = new RenderNode();
1612renderNode.backgroundColor = 0xffff0000;
1613renderNode.frame = { x: 10, y: 10, width: 100, height: 100 };
1614renderNode.shadowElevation = 10;
1615renderNode.shadowColor = 0XFF00FF00;
1616renderNode.shadowOffset = { x: 10, y: 10 };
1617renderNode.shadowAlpha = 0.1;
1618const shadowAlpha = renderNode.shadowAlpha;
1619
1620class MyNodeController extends NodeController {
1621  private rootNode: FrameNode | null = null;
1622
1623  makeNode(uiContext: UIContext): FrameNode | null {
1624    this.rootNode = new FrameNode(uiContext);
1625
1626    const rootRenderNode = this.rootNode.getRenderNode();
1627    if (rootRenderNode !== null) {
1628      rootRenderNode.appendChild(renderNode);
1629    }
1630
1631    return this.rootNode;
1632  }
1633}
1634
1635@Entry
1636@Component
1637struct Index {
1638  private myNodeController: MyNodeController = new MyNodeController();
1639
1640  build() {
1641    Row() {
1642      NodeContainer(this.myNodeController)
1643    }
1644  }
1645}
1646```
1647
1648### shadowElevation
1649
1650set shadowElevation(elevation: number)
1651
1652设置当前RenderNode的阴影的光照高度。
1653
1654**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1655
1656**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1657
1658**参数:**
1659
1660| 参数名    | 类型   | 必填 | 说明                             |
1661| --------- | ------ | ---- | -------------------------------- |
1662| elevation | number | 是   | 将要设置的RenderNode的光照高度。<br/> 取值范围:[0, +∞) |
1663
1664get shadowElevation(): number
1665
1666获取当前RenderNode的阴影的光照高度。
1667
1668**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1669
1670**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1671
1672**返回值:**
1673
1674| 类型   | 说明                                  |
1675| ------ | ------------------------------------- |
1676| number | 当前RenderNode的阴影高度,默认值为0。 <br/> 取值范围:[0, +∞) |
1677
1678**示例:**
1679
1680```ts
1681import {  RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1682
1683const renderNode = new RenderNode();
1684renderNode.backgroundColor = 0xffff0000;
1685renderNode.frame = { x: 0, y: 0, width: 100, height: 100 };
1686renderNode.shadowOffset = { x: 10, y: 10 };
1687renderNode.shadowAlpha = 0.7
1688renderNode.shadowElevation = 30;
1689const shadowElevation = renderNode.shadowElevation;
1690
1691class MyNodeController extends NodeController {
1692  private rootNode: FrameNode | null = null;
1693
1694  makeNode(uiContext: UIContext): FrameNode | null {
1695    this.rootNode = new FrameNode(uiContext);
1696
1697    const rootRenderNode = this.rootNode.getRenderNode();
1698    if (rootRenderNode !== null) {
1699      rootRenderNode.appendChild(renderNode);
1700    }
1701
1702    return this.rootNode;
1703  }
1704}
1705
1706@Entry
1707@Component
1708struct Index {
1709  private myNodeController: MyNodeController = new MyNodeController();
1710
1711  build() {
1712    Row() {
1713      NodeContainer(this.myNodeController)
1714    }
1715  }
1716}
1717```
1718
1719![shadowElevation](./figures/ShadowElevation.jpg)
1720
1721### shadowRadius
1722
1723set shadowRadius(radius: number)
1724
1725设置当前RenderNode的阴影模糊半径。
1726
1727**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1728
1729**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1730
1731**参数:**
1732
1733| 参数名 | 类型   | 必填 | 说明                                 |
1734| ------ | ------ | ---- | ------------------------------------ |
1735| radius | number | 是   | 将要设置的RenderNode的阴影模糊半径。<br/> 取值范围:[0, +∞) |
1736
1737get shadowRadius(): number
1738
1739获取当前RenderNode的阴影模糊半径。
1740
1741**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1742
1743**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1744
1745**返回值:**
1746
1747| 类型   | 说明                                      |
1748| ------ | ----------------------------------------- |
1749| number | 当前RenderNode的阴影模糊半径,默认值为0。<br/> 取值范围:[0, +∞) |
1750
1751**示例:**
1752
1753```ts
1754import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
1755
1756const renderNode = new RenderNode();
1757renderNode.backgroundColor = 0xff0000ff;
1758renderNode.frame = {
1759  x: 100,
1760  y: 100,
1761  width: 100,
1762  height: 100
1763};
1764renderNode.shadowOffset = { x: 10, y: 10 };
1765renderNode.shadowAlpha = 0.7
1766renderNode.shadowRadius = 30;
1767const shadowRadius = renderNode.shadowRadius;
1768console.log(`FrameNode ${shadowRadius}`);
1769
1770class MyNodeController extends NodeController {
1771  private rootNode: FrameNode | null = null;
1772
1773  makeNode(uiContext: UIContext): FrameNode | null {
1774    this.rootNode = new FrameNode(uiContext);
1775
1776    const rootRenderNode = this.rootNode.getRenderNode();
1777    if (rootRenderNode !== null) {
1778      rootRenderNode.appendChild(renderNode);
1779    }
1780
1781    return this.rootNode;
1782  }
1783}
1784
1785@Entry
1786@Component
1787struct Index {
1788  private myNodeController: MyNodeController = new MyNodeController();
1789
1790  build() {
1791    Row() {
1792      NodeContainer(this.myNodeController)
1793    }
1794  }
1795}
1796```
1797
1798![shadowRadius](./figures/ShadowRadius.jpg)
1799
1800### draw
1801
1802draw(context: DrawContext): void
1803
1804绘制方法,需要开发者进行实现。该方法会在RenderNode进行绘制时被调用。
1805
1806**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1807
1808**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1809
1810**参数:**
1811
1812| 参数名  | 类型                                                   | 必填 | 说明             |
1813| ------- | ------------------------------------------------------ | ---- | ---------------- |
1814| context | [DrawContext](./js-apis-arkui-graphics.md#drawcontext) | 是   | 图形绘制上下文。 |
1815
1816**示例:**
1817
1818ArkTS侧代码:
1819
1820```ts
1821// Index.ets
1822import bridge from "libentry.so" // 该 so 由开发者通过 NAPI 编写并生成
1823import { RenderNode, FrameNode, NodeController, DrawContext } from '@kit.ArkUI';
1824
1825class MyRenderNode extends RenderNode {
1826  uiContext: UIContext;
1827
1828  constructor(uiContext: UIContext) {
1829    super();
1830    this.uiContext = uiContext;
1831  }
1832
1833  draw(context: DrawContext) {
1834    // 需要将 context 中的宽度和高度从vp转换为px
1835    bridge.nativeOnDraw(0, context, this.uiContext.vp2px(context.size.height), this.uiContext.vp2px(context.size.width));
1836  }
1837}
1838
1839class MyNodeController extends NodeController {
1840  private rootNode: FrameNode | null = null;
1841
1842  makeNode(uiContext: UIContext): FrameNode | null {
1843    this.rootNode = new FrameNode(uiContext);
1844
1845    const rootRenderNode = this.rootNode.getRenderNode();
1846    if (rootRenderNode !== null) {
1847      const renderNode = new MyRenderNode(uiContext);
1848      renderNode.size = { width: 100, height: 100 }
1849      rootRenderNode.appendChild(renderNode);
1850    }
1851
1852    return this.rootNode;
1853  }
1854}
1855
1856@Entry
1857@Component
1858struct Index {
1859  private myNodeController: MyNodeController = new MyNodeController();
1860  build() {
1861    Row() {
1862      NodeContainer(this.myNodeController)
1863    }
1864  }
1865}
1866```
1867
1868C++侧可通过NAPI来获取Canvas,并进行后续的自定义绘制操作。
1869
1870```c++
1871// native_bridge.cpp
1872#include "napi/native_api.h"
1873#include <native_drawing/drawing_canvas.h>
1874#include <native_drawing/drawing_color.h>
1875#include <native_drawing/drawing_path.h>
1876#include <native_drawing/drawing_pen.h>
1877
1878static napi_value OnDraw(napi_env env, napi_callback_info info)
1879{
1880    size_t argc = 4;
1881    napi_value args[4] = { nullptr };
1882    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1883
1884    int32_t id;
1885    napi_get_value_int32(env, args[0], &id);
1886
1887    // 获取 Canvas 指针
1888    void* temp = nullptr;
1889    napi_unwrap(env, args[1], &temp);
1890    OH_Drawing_Canvas *canvas = reinterpret_cast<OH_Drawing_Canvas*>(temp);
1891
1892    // 获取 Canvas 宽度
1893    int32_t width;
1894    napi_get_value_int32(env, args[2], &width);
1895
1896    // 获取 Canvas 高度
1897    int32_t height;
1898    napi_get_value_int32(env, args[3], &height);
1899
1900    // 传入canvas、height、width等信息至绘制函数中进行自定义绘制
1901    auto path = OH_Drawing_PathCreate();
1902    OH_Drawing_PathMoveTo(path, width / 4, height / 4);
1903    OH_Drawing_PathLineTo(path, width * 3 / 4, height / 4);
1904    OH_Drawing_PathLineTo(path, width * 3 / 4, height * 3 / 4);
1905    OH_Drawing_PathLineTo(path, width / 4, height * 3 / 4);
1906    OH_Drawing_PathLineTo(path, width / 4, height / 4);
1907    OH_Drawing_PathClose(path);
1908
1909    auto pen = OH_Drawing_PenCreate();
1910    OH_Drawing_PenSetWidth(pen, 10);
1911    OH_Drawing_PenSetColor(pen, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0x00, 0x00));
1912    OH_Drawing_CanvasAttachPen(canvas, pen);
1913
1914    OH_Drawing_CanvasDrawPath(canvas, path);
1915
1916    return nullptr;
1917}
1918
1919EXTERN_C_START
1920static napi_value Init(napi_env env, napi_value exports)
1921{
1922    napi_property_descriptor desc[] = {
1923        { "nativeOnDraw", nullptr, OnDraw, nullptr, nullptr, nullptr, napi_default, nullptr }
1924    };
1925    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1926    return exports;
1927}
1928EXTERN_C_END
1929
1930static napi_module demoModule = {
1931    .nm_version =1,
1932    .nm_flags = 0,
1933    .nm_filename = nullptr,
1934    .nm_register_func = Init,
1935    .nm_modname = "entry",
1936    .nm_priv = ((void*)0),
1937    .reserved = { 0 },
1938};
1939
1940extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
1941{
1942    napi_module_register(&demoModule);
1943}
1944```
1945
1946修改工程中的`src/main/cpp/CMakeLists.txt`文件,添加如下内容:
1947
1948<!--code_no_check-->
1949
1950```cmake
1951# the minimum version of CMake.
1952cmake_minimum_required(VERSION 3.4.1)
1953project(NapiTest)
1954
1955set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
1956
1957include_directories(${NATIVERENDER_ROOT_PATH}
1958                    ${NATIVERENDER_ROOT_PATH}/include)
1959
1960add_library(entry SHARED native_bridge.cpp)
1961target_link_libraries(entry PUBLIC libace_napi.z.so)
1962target_link_libraries(entry PUBLIC libace_ndk.z.so)
1963target_link_libraries(entry PUBLIC libnative_drawing.so)
1964```
1965
1966同时在工程中的`src/main/cpp/types/libentry/index.d.ts`文件中,添加自定义绘制函数在ArkTs侧的定义,如:
1967
1968<!--code_no_check-->
1969
1970```ts
1971import { DrawContext } from '@kit.ArkUI';
1972
1973export const nativeOnDraw: (id: number, context: DrawContext, width: number, height: number) => number;
1974```
1975
1976### invalidate
1977
1978invalidate(): void
1979
1980该方法会触发RenderNode的重新渲染。
1981
1982**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1983
1984**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1985
1986**示例:**
1987
1988```ts
1989import bridge from "libentry.so" // 该 so 由开发者通过 NAPI 编写并生成
1990import { RenderNode, FrameNode, NodeController, DrawContext } from '@kit.ArkUI';
1991
1992class MyRenderNode extends RenderNode {
1993  uiContext: UIContext;
1994
1995  constructor(uiContext: UIContext) {
1996    super();
1997    this.uiContext = uiContext;
1998  }
1999
2000  draw(context: DrawContext) {
2001    // 需要将 context 中的宽度和高度从vp转换为px
2002    bridge.nativeOnDraw(0, context, this.uiContext.vp2px(context.size.height), this.uiContext.vp2px(context.size.width));
2003  }
2004}
2005
2006class MyNodeController extends NodeController {
2007  private rootNode: FrameNode | null = null;
2008  newNode: MyRenderNode | null = null;
2009
2010  makeNode(uiContext: UIContext): FrameNode | null {
2011    this.rootNode = new FrameNode(uiContext);
2012    const renderNode = this.rootNode.getRenderNode();
2013    if (renderNode === null) {
2014      return this.rootNode;
2015    }
2016    this.newNode = new MyRenderNode(uiContext);
2017    this.newNode.size = { width: 100, height: 100 };
2018    renderNode.appendChild(this.newNode);
2019    return this.rootNode;
2020  }
2021}
2022
2023@Entry
2024@Component
2025struct Index {
2026  private myNodeController: MyNodeController = new MyNodeController();
2027
2028  build() {
2029    Column() {
2030      Column() {
2031        NodeContainer(this.myNodeController)
2032          .width('100%')
2033        Button('Invalidate')
2034          .onClick(() => {
2035            this.myNodeController.newNode?.invalidate()
2036          })
2037      }
2038      .width('100%')
2039      .height('100%')
2040    }
2041    .height('100%')
2042  }
2043}
2044```
2045
2046`libentry.so`的构建方式见draw方法的示例。
2047
2048### borderStyle<sup>12+</sup>
2049
2050set borderStyle(style: Edges\<BorderStyle>)
2051
2052设置当前RenderNode的边框样式。
2053
2054**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2055
2056**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2057
2058**参数:**
2059
2060| 参数名 | 类型                                                                                                   | 必填 | 说明                   |
2061| ------ | ------------------------------------------------------------------------------------------------------ | ---- | ---------------------- |
2062| style  | [Edges](./js-apis-arkui-graphics.md#edgest12)<[BorderStyle](./arkui-ts/ts-appendix-enums.md#borderstyle)> | 是   | RenderNode的边框样式。 |
2063
2064get borderStyle(): Edges\<BorderStyle>
2065
2066获取当前RenderNode的边框样式。
2067
2068**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2069
2070**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2071
2072**返回值:**
2073
2074| 类型                                                                                                   | 说明                   |
2075| ------------------------------------------------------------------------------------------------------ | ---------------------- |
2076| [Edges](./js-apis-arkui-graphics.md#edgest12)<[BorderStyle](./arkui-ts/ts-appendix-enums.md#borderstyle)> | RenderNode的边框样式。 |
2077
2078**示例:**
2079```ts
2080import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
2081
2082const renderNode = new RenderNode();
2083renderNode.frame = { x: 0, y: 0, width: 150, height: 150 };
2084renderNode.backgroundColor = 0XFF00FF00;
2085renderNode.borderWidth = { left: 8, top: 8, right: 8, bottom: 8 };
2086renderNode.borderStyle = {
2087  left: BorderStyle.Solid,
2088  top: BorderStyle.Dotted,
2089  right: BorderStyle.Dashed,
2090  bottom: BorderStyle.Solid
2091}
2092const borderStyle = renderNode.borderStyle;
2093
2094
2095class MyNodeController extends NodeController {
2096  private rootNode: FrameNode | null = null;
2097
2098  makeNode(uiContext: UIContext): FrameNode | null {
2099    this.rootNode = new FrameNode(uiContext);
2100
2101    const rootRenderNode = this.rootNode.getRenderNode();
2102    if (rootRenderNode !== null) {
2103      rootRenderNode.appendChild(renderNode);
2104    }
2105
2106    return this.rootNode;
2107  }
2108}
2109
2110@Entry
2111@Component
2112struct Index {
2113  private myNodeController: MyNodeController = new MyNodeController();
2114
2115  build() {
2116    Row() {
2117      NodeContainer(this.myNodeController)
2118    }
2119  }
2120}
2121```
2122
2123### borderWidth<sup>12+</sup>
2124
2125set borderWidth(width: Edges\<number>)
2126
2127设置当前RenderNode的边框宽度。
2128
2129**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2130
2131**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2132
2133**参数:**
2134
2135| 参数名 | 类型                                                | 必填 | 说明                   |
2136| ------ | --------------------------------------------------- | ---- | ---------------------- |
2137| width  | [Edges\<number>](./js-apis-arkui-graphics.md#edgest12) | 是   | RenderNode的边框宽度,单位为vp。 |
2138
2139get borderWidth(): Edges\<number>
2140
2141获取当前RenderNode的边框宽度。
2142
2143**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2144
2145**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2146
2147**返回值:**
2148
2149| 类型                                                | 说明                   |
2150| --------------------------------------------------- | ---------------------- |
2151| [Edges\<number>](./js-apis-arkui-graphics.md#edgest12) | RenderNode的边框宽度,默认所有边框宽度为0vp。 |
2152
2153**示例:**
2154
2155```ts
2156import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
2157
2158const renderNode = new RenderNode();
2159renderNode.frame = { x: 0, y: 0, width: 150, height: 150 };
2160renderNode.backgroundColor = 0XFF00FF00;
2161renderNode.borderWidth = { left: 8, top: 8, right: 8, bottom: 8 };
2162const borderWidth = renderNode.borderWidth;
2163
2164
2165class MyNodeController extends NodeController {
2166  private rootNode: FrameNode | null = null;
2167
2168  makeNode(uiContext: UIContext): FrameNode | null {
2169    this.rootNode = new FrameNode(uiContext);
2170
2171    const rootRenderNode = this.rootNode.getRenderNode();
2172    if (rootRenderNode !== null) {
2173      rootRenderNode.appendChild(renderNode);
2174    }
2175
2176    return this.rootNode;
2177  }
2178}
2179
2180@Entry
2181@Component
2182struct Index {
2183  private myNodeController: MyNodeController = new MyNodeController();
2184
2185  build() {
2186    Row() {
2187      NodeContainer(this.myNodeController)
2188    }
2189  }
2190}
2191```
2192
2193### borderColor<sup>12+</sup>
2194
2195set borderColor(color: Edges\<number>)
2196
2197设置当前RenderNode的边框颜色。
2198
2199**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2200
2201**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2202
2203**参数:**
2204
2205| 参数名 | 类型                                                | 必填 | 说明                   |
2206| ------ | --------------------------------------------------- | ---- | ---------------------- |
2207| color  | [Edges\<number>](./js-apis-arkui-graphics.md#edgest12) | 是   | RenderNode的边框颜色。 |
2208
2209get borderColor(): Edges\<number>
2210
2211获取当前RenderNode的边框颜色。
2212
2213**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2214
2215**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2216
2217**返回值:**
2218
2219| 类型                                                | 说明                   |
2220| --------------------------------------------------- | ---------------------- |
2221| [Edges\<number>](./js-apis-arkui-graphics.md#edgest12) | RenderNode的边框颜色,默认所有边框颜色为0XFF000000。 |
2222
2223**示例:**
2224
2225```ts
2226import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
2227
2228const renderNode = new RenderNode();
2229renderNode.frame = { x: 0, y: 0, width: 150, height: 150 };
2230renderNode.backgroundColor = 0XFF00FF00;
2231renderNode.borderWidth = { left: 8, top: 8, right: 8, bottom: 8 };
2232renderNode.borderColor = { left: 0xFF0000FF, top: 0xFF0000FF, right: 0xFF0000FF, bottom: 0xFF0000FF };
2233const borderColor = renderNode.borderColor;
2234
2235
2236class MyNodeController extends NodeController {
2237  private rootNode: FrameNode | null = null;
2238
2239  makeNode(uiContext: UIContext): FrameNode | null {
2240    this.rootNode = new FrameNode(uiContext);
2241
2242    const rootRenderNode = this.rootNode.getRenderNode();
2243    if (rootRenderNode !== null) {
2244      rootRenderNode.appendChild(renderNode);
2245    }
2246
2247    return this.rootNode;
2248  }
2249}
2250
2251@Entry
2252@Component
2253struct Index {
2254  private myNodeController: MyNodeController = new MyNodeController();
2255
2256  build() {
2257    Row() {
2258      NodeContainer(this.myNodeController)
2259    }
2260  }
2261}
2262```
2263
2264### borderRadius<sup>12+</sup>
2265
2266set borderRadius(radius: BorderRadiuses)
2267
2268设置当前RenderNode的边框圆角。
2269
2270**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2271
2272**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2273
2274**参数:**
2275
2276| 参数名 | 类型                                                         | 必填 | 说明                   |
2277| ------ | ------------------------------------------------------------ | ---- | ---------------------- |
2278| radius | [BorderRadiuses](./js-apis-arkui-graphics.md#borderradiuses) | 是   | RenderNode的边框圆角,单位为vp。 |
2279
2280
2281get borderRadius(): BorderRadiuses
2282
2283获取当前RenderNode的边框圆角。
2284
2285**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2286
2287**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2288
2289**返回值:**
2290
2291| 类型                                                         | 说明                   |
2292| ------------------------------------------------------------ | ---------------------- |
2293| [BorderRadiuses](./js-apis-arkui-graphics.md#borderradiuses) | RenderNode的边框圆角,默认所有边框圆角为0vp。 |
2294
2295**示例:**
2296
2297```ts
2298import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
2299
2300const renderNode = new RenderNode();
2301renderNode.frame = { x: 0, y: 0, width: 150, height: 150 };
2302renderNode.backgroundColor = 0XFF00FF00;
2303renderNode.borderRadius = { topLeft: 32, topRight: 32, bottomLeft: 32, bottomRight: 32 };
2304const borderRadius = renderNode.borderRadius;
2305
2306
2307class MyNodeController extends NodeController {
2308  private rootNode: FrameNode | null = null;
2309
2310  makeNode(uiContext: UIContext): FrameNode | null {
2311    this.rootNode = new FrameNode(uiContext);
2312
2313    const rootRenderNode = this.rootNode.getRenderNode();
2314    if (rootRenderNode !== null) {
2315      rootRenderNode.appendChild(renderNode);
2316    }
2317
2318    return this.rootNode;
2319  }
2320}
2321
2322@Entry
2323@Component
2324struct Index {
2325  private myNodeController: MyNodeController = new MyNodeController();
2326
2327  build() {
2328    Row() {
2329      NodeContainer(this.myNodeController)
2330    }
2331  }
2332}
2333```
2334
2335### shapeMask<sup>12+</sup>
2336
2337set shapeMask(shapeMask: ShapeMask)
2338
2339设置当前RenderNode的遮罩。
2340
2341**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2342
2343**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2344
2345**参数:**
2346
2347| 参数名    | 类型                                               | 必填 | 说明               |
2348| --------- | -------------------------------------------------- | ---- | ------------------ |
2349| shapeMask | [ShapeMask](./js-apis-arkui-graphics.md#shapemask12) | 是   | RenderNode的遮罩。 |
2350
2351get shapeMask(): ShapeMask
2352
2353获取当前RenderNode的遮罩。
2354
2355**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2356
2357**返回值:**
2358
2359| 类型                                               | 说明                   |
2360| -------------------------------------------------- | ---------------------- |
2361| [ShapeMask](./js-apis-arkui-graphics.md#shapemask12) | RenderNode的边框遮罩。 |
2362
2363**示例:**
2364
2365```ts
2366import { RenderNode, FrameNode, NodeController, ShapeMask } from '@kit.ArkUI';
2367
2368const mask = new ShapeMask();
2369mask.setRectShape({ left: 0, right: 150, top: 0, bottom: 150 });
2370mask.fillColor = 0X55FF0000;
2371mask.strokeColor = 0XFFFF0000;
2372mask.strokeWidth = 24;
2373
2374const renderNode = new RenderNode();
2375renderNode.frame = { x: 0, y: 0, width: 150, height: 150 };
2376renderNode.backgroundColor = 0XFF00FF00;
2377renderNode.shapeMask = mask;
2378const shapeMask = renderNode.shapeMask;
2379
2380
2381class MyNodeController extends NodeController {
2382  private rootNode: FrameNode | null = null;
2383
2384  makeNode(uiContext: UIContext): FrameNode | null {
2385    this.rootNode = new FrameNode(uiContext);
2386
2387    const rootRenderNode = this.rootNode.getRenderNode();
2388    if (rootRenderNode !== null) {
2389      rootRenderNode.appendChild(renderNode);
2390    }
2391
2392    return this.rootNode;
2393  }
2394}
2395
2396@Entry
2397@Component
2398struct Index {
2399  private myNodeController: MyNodeController = new MyNodeController();
2400
2401  build() {
2402    Row() {
2403      NodeContainer(this.myNodeController)
2404    }
2405  }
2406}
2407```
2408
2409### shapeClip<sup>12+</sup>
2410
2411set shapeClip(shapeClip: ShapeClip)
2412
2413设置当前RenderNode的裁剪形状。
2414
2415**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2416
2417**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2418
2419**参数:**
2420
2421| 参数名    | 类型                                               | 必填 | 说明               |
2422| --------- | -------------------------------------------------- | ---- | ------------------ |
2423| shapeClip | [ShapeClip](./js-apis-arkui-graphics.md#shapeclip12) | 是   | RenderNode的裁剪形状。 |
2424
2425get shapeClip(): ShapeClip
2426
2427获取当前RenderNode的裁剪形状。
2428
2429**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2430
2431**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2432
2433**返回值:**
2434
2435| 类型                                               | 说明                   |
2436| -------------------------------------------------- | ---------------------- |
2437| [ShapeClip](./js-apis-arkui-graphics.md#shapeclip12) | RenderNode的裁剪形状。 |
2438
2439**示例:**
2440
2441```ts
2442import { RenderNode, FrameNode, NodeController, ShapeMask, ShapeClip } from '@kit.ArkUI';
2443
2444const clip = new ShapeClip();
2445clip.setCommandPath({ commands: "M100 0 L0 100 L50 200 L150 200 L200 100 Z" });
2446
2447const renderNode = new RenderNode();
2448renderNode.frame = {
2449  x: 0,
2450  y: 0,
2451  width: 150,
2452  height: 150
2453};
2454renderNode.backgroundColor = 0XFF00FF00;
2455renderNode.shapeClip = clip;
2456const shapeClip = renderNode.shapeClip;
2457
2458class MyNodeController extends NodeController {
2459  private rootNode: FrameNode | null = null;
2460
2461  makeNode(uiContext: UIContext): FrameNode | null {
2462    this.rootNode = new FrameNode(uiContext);
2463
2464    const rootRenderNode = this.rootNode.getRenderNode();
2465    if (rootRenderNode !== null) {
2466      rootRenderNode.appendChild(renderNode);
2467    }
2468
2469    return this.rootNode;
2470  }
2471}
2472
2473@Entry
2474@Component
2475struct Index {
2476  private myNodeController: MyNodeController = new MyNodeController();
2477
2478  build() {
2479    Column() {
2480      NodeContainer(this.myNodeController)
2481        .borderWidth(1)
2482      Button("setRectShape")
2483        .onClick(() => {
2484          shapeClip.setRectShape({
2485            left: 0,
2486            right: 150,
2487            top: 0,
2488            bottom: 150
2489          });
2490          renderNode.shapeClip = shapeClip;
2491        })
2492      Button("setRoundRectShape")
2493        .onClick(() => {
2494          renderNode.shapeClip.setRoundRectShape({
2495            rect: {
2496              left: 0,
2497              top: 0,
2498              right: this.getUIContext().vp2px(150),
2499              bottom: this.getUIContext().vp2px(150)
2500            },
2501            corners: {
2502              topLeft: { x: 32, y: 32 },
2503              topRight: { x: 32, y: 32 },
2504              bottomLeft: { x: 32, y: 32 },
2505              bottomRight: { x: 32, y: 32 }
2506            }
2507          });
2508          renderNode.shapeClip = renderNode.shapeClip;
2509        })
2510      Button("setCircleShape")
2511        .onClick(() => {
2512          renderNode.shapeClip.setCircleShape({ centerY: 75, centerX: 75, radius: 75 });
2513          renderNode.shapeClip = renderNode.shapeClip;
2514
2515        })
2516      Button("setOvalShape")
2517        .onClick(() => {
2518          renderNode.shapeClip.setOvalShape({
2519            left: 0,
2520            right: this.getUIContext().vp2px(150),
2521            top: 0,
2522            bottom: this.getUIContext().vp2px(100)
2523          });
2524          renderNode.shapeClip = renderNode.shapeClip;
2525        })
2526      Button("setCommandPath")
2527        .onClick(() => {
2528          renderNode.shapeClip.setCommandPath({ commands: "M100 0 L0 100 L50 200 L150 200 L200 100 Z" });
2529          renderNode.shapeClip = renderNode.shapeClip;
2530        })
2531    }
2532  }
2533}
2534```
2535
2536### dispose<sup>12+</sup>
2537
2538dispose(): void
2539
2540立即释放当前RenderNode。
2541
2542**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2543
2544**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2545
2546**示例:**
2547
2548```ts
2549import { RenderNode, FrameNode, NodeController } from '@kit.ArkUI';
2550
2551const renderNode = new RenderNode();
2552renderNode.frame = { x: 0, y: 100, width: 100, height: 100 };
2553renderNode.backgroundColor = 0xffff0000;
2554
2555class MyNodeController extends NodeController {
2556  private rootNode: FrameNode | null = null;
2557
2558  makeNode(uiContext: UIContext): FrameNode | null {
2559    this.rootNode = new FrameNode(uiContext);
2560
2561    const rootRenderNode = this.rootNode!.getRenderNode();
2562    if (rootRenderNode !== null) {
2563      rootRenderNode.size = { width: 200, height: 200 };
2564      rootRenderNode.backgroundColor = 0xff00ff00;
2565      rootRenderNode.appendChild(renderNode);
2566    }
2567
2568    return this.rootNode;
2569  }
2570
2571  disposeRenderNode() {
2572    const rootRenderNode = this.rootNode!.getRenderNode();
2573    if (rootRenderNode !== null) {
2574      rootRenderNode.removeChild(renderNode);
2575    }
2576    renderNode.dispose();
2577  }
2578}
2579
2580@Entry
2581@Component
2582struct Index {
2583  private myNodeController: MyNodeController = new MyNodeController();
2584
2585  build() {
2586    Column({ space: 4 }) {
2587      NodeContainer(this.myNodeController)
2588      Button('RenderNode dispose')
2589        .onClick(() => {
2590          this.myNodeController.disposeRenderNode();
2591        })
2592        .width('100%')
2593    }
2594  }
2595}
2596```
2597
2598### markNodeGroup<sup>12+</sup>
2599
2600set markNodeGroup(isNodeGroup: boolean)
2601
2602标记是否优先绘制节点及其子节点。若设置为true,则透明度等属性将在节点绘制完毕后再进行合成。设置效果如下:
2603
2604![markNodeGroup](./figures/renderNode-markNodeGroup.png)
2605
2606**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2607
2608**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2609
2610**参数:**
2611
2612| 参数名    | 类型                                               | 必填 | 说明               |
2613| --------- | -------------------------------------------------- | ---- | ------------------ |
2614| isNodeGroup | boolean | 是   | 设置是否优先绘制节点及其子节点。<br/>true表示优先绘制节点及其子节点,false表示不是优先绘制节点及其子节点。 |
2615
2616get markNodeGroup(): boolean
2617
2618获取当前节点是否标记了优先绘制。
2619
2620**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2621
2622**返回值:**
2623
2624| 类型    | 说明                                        |
2625| ------- | ------------------------------------------- |
2626| boolean | 当前节点是否标记了优先绘制。<br/>true表示当前节点标记了优先绘制,false表示当前节点没有标记优先绘制。<br/>默认值:false |
2627
2628**示例:**
2629
2630```ts
2631import { RenderNode, FrameNode, NodeController, DrawContext } from '@kit.ArkUI';
2632import { drawing } from '@kit.ArkGraphics2D';
2633
2634class MyRenderNode extends RenderNode {
2635  draw(context: DrawContext) {
2636    const canvas = context.canvas;
2637    const brush = new drawing.Brush();
2638    brush.setColor({ alpha: 255, red: 255, green: 0, blue: 0 });
2639    canvas.attachBrush(brush);
2640    canvas.drawRect({ left: 0, right: 200, top: 0, bottom: 200 });
2641    canvas.detachBrush();
2642
2643    brush.setColor({ alpha: 255, red: 0, green: 255, blue: 0 });
2644    canvas.attachBrush(brush);
2645    canvas.drawRect({ left: 100, right: 300, top: 100, bottom: 300 });
2646    canvas.detachBrush();
2647  }
2648}
2649
2650const renderNode = new MyRenderNode();
2651renderNode.frame = { x: 100, y: 100, width: 200, height: 200 };
2652renderNode.backgroundColor = 0xff0000ff;
2653renderNode.markNodeGroup = true;
2654renderNode.opacity = 0.5;
2655
2656const isNodeGroup = renderNode.markNodeGroup;
2657
2658class MyNodeController extends NodeController {
2659  private rootNode: FrameNode | null = null;
2660
2661  makeNode(uiContext: UIContext): FrameNode | null {
2662    this.rootNode = new FrameNode(uiContext);
2663
2664    const rootRenderNode = this.rootNode.getRenderNode();
2665    if (rootRenderNode !== null) {
2666      rootRenderNode.appendChild(renderNode);
2667    }
2668
2669    return this.rootNode;
2670  }
2671}
2672
2673@Entry
2674@Component
2675struct Index {
2676  private myNodeController: MyNodeController = new MyNodeController();
2677
2678  build() {
2679    Row() {
2680      NodeContainer(this.myNodeController)
2681    }
2682  }
2683}
2684```
2685
2686### lengthMetricsUnit<sup>12+</sup>
2687
2688set lengthMetricsUnit(unit: LengthMetricsUnit)
2689
2690设置RenderNode各个属性使用的单位。
2691
2692**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2693
2694**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2695
2696**参数:**
2697
2698| 参数名 | 类型                                                                 | 必填 | 说明                               |
2699| ------ | -------------------------------------------------------------------- | ---- | ---------------------------------- |
2700| unit   | [LengthMetricsUnit](./js-apis-arkui-graphics.md#lengthmetricsunit12) | 是   | 设置RenderNode各个属性使用的单位。 |
2701
2702get lengthMetricsUnit(): LengthMetricsUnit
2703
2704获取RenderNode各个属性使用的单位。
2705
2706**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2707
2708**返回值:**
2709
2710| 类型    | 说明                                        |
2711| ------- | ------------------------------------------- |
2712| [LengthMetricsUnit](./js-apis-arkui-graphics.md#lengthmetricsunit12) | 获取RenderNode各个属性使用的单位,默认值为LengthMetricsUnit.DEFAULT。 |
2713
2714**示例:**
2715
2716```ts
2717import { RenderNode, FrameNode, NodeController, DrawContext } from '@kit.ArkUI';
2718import { drawing } from '@kit.ArkGraphics2D';
2719import { LengthMetricsUnit } from '@ohos.arkui.node';
2720
2721class BaseRenderNode extends RenderNode {
2722  constructor() {
2723    super();
2724    this.lengthMetricsUnit = LengthMetricsUnit.PX;
2725  }
2726}
2727
2728class MyRenderNode extends BaseRenderNode {
2729  draw(context: DrawContext) {
2730    const canvas = context.canvas;
2731    const brush = new drawing.Brush();
2732    brush.setColor({ alpha: 255, red: 255, green: 0, blue: 0 });
2733    canvas.attachBrush(brush);
2734    canvas.drawRect({ left: 0, right: 200, top: 0, bottom: 200 });
2735    canvas.detachBrush();
2736  }
2737}
2738
2739const renderNode = new MyRenderNode();
2740renderNode.frame = { x: 100, y: 100, width: 200, height: 200 };
2741renderNode.backgroundColor = 0xff0000ff;
2742renderNode.rotation = { x: 0, y: 0, z: 45 };
2743
2744class MyNodeController extends NodeController {
2745  private rootNode: FrameNode | null = null;
2746
2747  makeNode(uiContext: UIContext): FrameNode | null {
2748    this.rootNode = new FrameNode(uiContext);
2749    const rootRenderNode = this.rootNode.getRenderNode();
2750    if (rootRenderNode !== null) {
2751      rootRenderNode.appendChild(renderNode);
2752    }
2753    return this.rootNode;
2754  }
2755}
2756
2757@Entry
2758@Component
2759struct Index {
2760  private myNodeController: MyNodeController = new MyNodeController();
2761
2762  build() {
2763    Row() {
2764      NodeContainer(this.myNodeController)
2765    }
2766  }
2767}
2768```
2769