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