From 8bc4e75d9094b1b8529222949251ed1e119fcb0b Mon Sep 17 00:00:00 2001 From: fangzhiyuan Date: Thu, 3 Jul 2025 11:37:17 +0800 Subject: [PATCH] =?UTF-8?q?FrameNode=E4=BD=8D=E7=BD=AE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E8=A1=A5=E5=85=85=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: fangzhiyuan --- .../apis-arkui/js-apis-arkui-frameNode.md | 367 ++++++++++++++++++ .../arkts-user-defined-arktsNode-frameNode.md | 4 + .../figures/frameNode-position-relation.png | Bin 0 -> 25590 bytes 3 files changed, 371 insertions(+) create mode 100644 zh-cn/application-dev/ui/figures/frameNode-position-relation.png diff --git a/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-frameNode.md b/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-frameNode.md index 970c124f1d3..b3b0ca52e02 100644 --- a/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-frameNode.md +++ b/zh-cn/application-dev/reference/apis-arkui/js-apis-arkui-frameNode.md @@ -488,6 +488,67 @@ getPositionToWindow(): Position **示例:** +```ts +import { NodeController, FrameNode, UIContext } from '@kit.ArkUI'; + +const TEST_TAG: string = "FrameNode "; + +class MyNodeController extends NodeController { + public frameNode: FrameNode | null = null; + private rootNode: FrameNode | null = null; + + makeNode(uiContext: UIContext): FrameNode | null { + this.rootNode = new FrameNode(uiContext); + this.frameNode = new FrameNode(uiContext); + this.frameNode.commonAttribute.backgroundColor(Color.Pink); + this.frameNode.commonAttribute.size({ width: 100, height: 100 }); + this.rootNode.appendChild(this.frameNode); + return this.rootNode; + } + + getPositionToWindow() { + let positionToWindow = this.rootNode?.getPositionToWindow(); + console.info(TEST_TAG + JSON.stringify(positionToWindow)); + } +} + +@Entry +@Component +struct Index { + private myNodeController: MyNodeController = new MyNodeController(); + private scroller: Scroller = new Scroller(); + @State index: number = 0; + + build() { + Scroll(this.scroller) { + Column({ space: 8 }) { + Column() { + Text("This is a NodeContainer.") + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor(0xFFFFFF) + .width('100%') + .fontSize(16) + NodeContainer(this.myNodeController) + .borderWidth(1) + .width(300) + .height(100) + } + + Button("getPositionToWindow") + .width(300) + .onClick(() => { + this.myNodeController.getPositionToWindow(); + }) + } + .width("100%") + } + .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 + } +} + +``` + 请参考[节点操作示例](#节点操作示例)。 @@ -509,6 +570,68 @@ getPositionToParent(): Position **示例:** +```ts +import { NodeController, FrameNode, UIContext } from '@kit.ArkUI'; + +const TEST_TAG: string = "FrameNode "; + +class MyNodeController extends NodeController { + public frameNode: FrameNode | null = null; + private rootNode: FrameNode | null = null; + + makeNode(uiContext: UIContext): FrameNode | null { + this.rootNode = new FrameNode(uiContext); + + this.frameNode = new FrameNode(uiContext); + this.frameNode.commonAttribute.backgroundColor(Color.Pink); + this.frameNode.commonAttribute.size({ width: 100, height: 100 }); + this.rootNode.appendChild(this.frameNode); + return this.rootNode; + } + + getPositionToParent() { + let positionToParent = this.rootNode?.getPositionToParent(); + console.info(TEST_TAG + JSON.stringify(positionToParent)); + } +} + +@Entry +@Component +struct Index { + private myNodeController: MyNodeController = new MyNodeController(); + private scroller: Scroller = new Scroller(); + @State index: number = 0; + + build() { + Scroll(this.scroller) { + Column({ space: 8 }) { + Column() { + Text("This is a NodeContainer.") + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor(0xFFFFFF) + .width('100%') + .fontSize(16) + NodeContainer(this.myNodeController) + .borderWidth(1) + .width(300) + .height(100) + } + + Button("getPositionToParent") + .width(300) + .onClick(() => { + this.myNodeController.getPositionToParent(); + }) + } + .width("100%") + } + .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 + } +} + +``` + 请参考[节点操作示例](#节点操作示例)。 ### getPositionToScreen12+ @@ -529,6 +652,68 @@ getPositionToScreen(): Position **示例:** +```ts +import { NodeController, FrameNode, UIContext } from '@kit.ArkUI'; + +const TEST_TAG: string = "FrameNode "; + +class MyNodeController extends NodeController { + public frameNode: FrameNode | null = null; + private rootNode: FrameNode | null = null; + + makeNode(uiContext: UIContext): FrameNode | null { + this.rootNode = new FrameNode(uiContext); + + this.frameNode = new FrameNode(uiContext); + this.frameNode.commonAttribute.backgroundColor(Color.Pink); + this.frameNode.commonAttribute.size({ width: 100, height: 100 }); + this.rootNode.appendChild(this.frameNode); + return this.rootNode; + } + + getPositionToScreen() { + let positionToScreen = this.rootNode?.getPositionToScreen(); + console.info(TEST_TAG + JSON.stringify(positionToScreen)); + } +} + +@Entry +@Component +struct Index { + private myNodeController: MyNodeController = new MyNodeController(); + private scroller: Scroller = new Scroller(); + @State index: number = 0; + + build() { + Scroll(this.scroller) { + Column({ space: 8 }) { + Column() { + Text("This is a NodeContainer.") + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor(0xFFFFFF) + .width('100%') + .fontSize(16) + NodeContainer(this.myNodeController) + .borderWidth(1) + .width(300) + .height(100) + } + + Button("getPositionToScreen") + .width(300) + .onClick(() => { + this.myNodeController.getPositionToScreen(); + }) + } + .width("100%") + } + .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 + } +} + +``` + 请参考[节点操作示例](#节点操作示例)。 @@ -550,6 +735,67 @@ getPositionToParentWithTransform(): Position **示例:** +```ts +import { NodeController, FrameNode, UIContext } from '@kit.ArkUI'; + +const TEST_TAG: string = "FrameNode "; + +class MyNodeController extends NodeController { + public frameNode: FrameNode | null = null; + private rootNode: FrameNode | null = null; + + makeNode(uiContext: UIContext): FrameNode | null { + this.rootNode = new FrameNode(uiContext); + + this.frameNode = new FrameNode(uiContext); + this.frameNode.commonAttribute.backgroundColor(Color.Pink); + this.frameNode.commonAttribute.size({ width: 100, height: 100 }); + this.rootNode.appendChild(this.frameNode); + return this.rootNode; + } + + getPositionToParentWithTransform() { + let positionToParentWithTransform = this.rootNode?.getPositionToParentWithTransform(); + console.info(TEST_TAG + JSON.stringify(positionToParentWithTransform)); + } +} + +@Entry +@Component +struct Index { + private myNodeController: MyNodeController = new MyNodeController(); + private scroller: Scroller = new Scroller(); + @State index: number = 0; + + build() { + Scroll(this.scroller) { + Column({ space: 8 }) { + Column() { + Text("This is a NodeContainer.") + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor(0xFFFFFF) + .width('100%') + .fontSize(16) + NodeContainer(this.myNodeController) + .borderWidth(1) + .width(300) + .height(100) + } + + Button("getPositionToParentWithTransform") + .width(300) + .onClick(() => { + this.myNodeController.getPositionToParentWithTransform(); + }) + } + .width("100%") + } + .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 + } +} +``` + 请参考[节点操作示例](#节点操作示例)。 ### getPositionToWindowWithTransform12+ @@ -570,6 +816,66 @@ getPositionToWindowWithTransform(): Position **示例:** +```ts +import { NodeController, FrameNode, UIContext } from '@kit.ArkUI'; + +const TEST_TAG: string = "FrameNode "; + +class MyNodeController extends NodeController { + public frameNode: FrameNode | null = null; + private rootNode: FrameNode | null = null; + + makeNode(uiContext: UIContext): FrameNode | null { + this.rootNode = new FrameNode(uiContext); + + this.frameNode = new FrameNode(uiContext); + this.frameNode.commonAttribute.backgroundColor(Color.Pink); + this.frameNode.commonAttribute.size({ width: 100, height: 100 }); + this.rootNode.appendChild(this.frameNode); + return this.rootNode; + } + + getPositionToWindowWithTransform() { + let positionToWindowWithTransform = this.rootNode?.getPositionToWindowWithTransform(); + console.info(TEST_TAG + JSON.stringify(positionToWindowWithTransform)); + } +} + +@Entry +@Component +struct Index { + private myNodeController: MyNodeController = new MyNodeController(); + private scroller: Scroller = new Scroller(); + @State index: number = 0; + + build() { + Scroll(this.scroller) { + Column({ space: 8 }) { + Column() { + Text("This is a NodeContainer.") + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor(0xFFFFFF) + .width('100%') + .fontSize(16) + NodeContainer(this.myNodeController) + .borderWidth(1) + .width(300) + .height(100) + } + Button("getPositionToWindowWithTransform") + .width(300) + .onClick(() => { + this.myNodeController.getPositionToWindowWithTransform(); + }) + } + .width("100%") + } + .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 + } +} +``` + 请参考[节点操作示例](#节点操作示例)。 ### getPositionToScreenWithTransform12+ @@ -590,6 +896,67 @@ getPositionToScreenWithTransform(): Position **示例:** +```ts +import { NodeController, FrameNode, UIContext } from '@kit.ArkUI'; + +const TEST_TAG: string = "FrameNode "; + +class MyNodeController extends NodeController { + public frameNode: FrameNode | null = null; + private rootNode: FrameNode | null = null; + + makeNode(uiContext: UIContext): FrameNode | null { + this.rootNode = new FrameNode(uiContext); + + this.frameNode = new FrameNode(uiContext); + this.frameNode.commonAttribute.backgroundColor(Color.Pink); + this.frameNode.commonAttribute.size({ width: 100, height: 100 }); + this.rootNode.appendChild(this.frameNode); + return this.rootNode; + } + + getPositionToScreenWithTransform() { + let positionToScreenWithTransform = this.rootNode?.getPositionToScreenWithTransform(); + console.info(TEST_TAG + JSON.stringify(positionToScreenWithTransform)); + } +} + +@Entry +@Component +struct Index { + private myNodeController: MyNodeController = new MyNodeController(); + private scroller: Scroller = new Scroller(); + @State index: number = 0; + + build() { + Scroll(this.scroller) { + Column({ space: 8 }) { + Column() { + Text("This is a NodeContainer.") + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor(0xFFFFFF) + .width('100%') + .fontSize(16) + NodeContainer(this.myNodeController) + .borderWidth(1) + .width(300) + .height(100) + } + + Button("getPositionToScreenWithTransform") + .width(300) + .onClick(() => { + this.myNodeController.getPositionToScreenWithTransform(); + }) + } + .width("100%") + } + .scrollable(ScrollDirection.Vertical) // 滚动方向纵向 + } +} +``` + 请参考[节点操作示例](#节点操作示例)。 diff --git a/zh-cn/application-dev/ui/arkts-user-defined-arktsNode-frameNode.md b/zh-cn/application-dev/ui/arkts-user-defined-arktsNode-frameNode.md index 52499e7f7db..bc11932a929 100644 --- a/zh-cn/application-dev/ui/arkts-user-defined-arktsNode-frameNode.md +++ b/zh-cn/application-dev/ui/arkts-user-defined-arktsNode-frameNode.md @@ -690,6 +690,10 @@ FrameNode提供了查询接口用于返回实体节点的基础信息。具体 FrameNode提供了查询节点相对窗口、父组件以及屏幕位置偏移的信息接口([getPositionToWindow](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontowindow12),[getPositionToParent](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontoparent12),[getPositionToScreen](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontoscreen12),[getPositionToWindowWithTransform](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontowindowwithtransform12),[getPositionToParentWithTransform](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontoparentwithtransform12),[getPositionToScreenWithTransform](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontoscreenwithtransform12),[getLayoutPosition](../reference/apis-arkui/js-apis-arkui-frameNode.md#getlayoutposition12),[getUserConfigBorderWidth](../reference/apis-arkui/js-apis-arkui-frameNode.md#getuserconfigborderwidth12),[getUserConfigPadding](../reference/apis-arkui/js-apis-arkui-frameNode.md#getuserconfigpadding12),[getUserConfigMargin](../reference/apis-arkui/js-apis-arkui-frameNode.md#getuserconfigmargin12))。 +[getPositionToWindow](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontowindow12),[getPositionToParent](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontoparent12),[getPositionToScreen](../reference/apis-arkui/js-apis-arkui-frameNode.md#getpositiontoscreen12)三个接口获取到的位置信息关系如下图所示: + +![FrameNode-Position-Relation](./figures/frameNode-position-relation.png) + ```ts import { NodeController, FrameNode, UIContext } from '@kit.ArkUI'; diff --git a/zh-cn/application-dev/ui/figures/frameNode-position-relation.png b/zh-cn/application-dev/ui/figures/frameNode-position-relation.png new file mode 100644 index 0000000000000000000000000000000000000000..484e56be7b9be9c39c309e33f774fb92def67f97 GIT binary patch literal 25590 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 V@wu}%e+Yu5JYD@<);T3K0RS736zu>2 literal 0 HcmV?d00001 -- Gitee