1# RemoteWindow (系统接口)
2
3远程控制窗口组件,可以通过此组件控制应用窗口,提供启动退出过程中控件动画和应用窗口联动动画的能力。
4
5>  **说明:**
6>
7>  该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9>  本模块为系统接口。
10
11## 子组件
12
13不可以包含子组件。
14
15## 接口
16
17RemoteWindow(target: WindowAnimationTarget)
18
19通过窗口动画对象创建组件。
20
21**参数:**
22
23| 参数名 | 参数类型 | 必填  | 参数描述 |
24| -------- | -------- | --------------- | -------- |
25| target | [WindowAnimationTarget](#windowanimationtarget) | 是   | 需要控制的动画窗口的描述。 |
26
27## WindowAnimationTarget
28
29目标窗口,用来远程控制实现动画。
30
31| 参数      | 类型     | 描述 |
32| ------- | ------ | ----------------------- |
33| bundleName  | string | 动画窗口所对应的进程。|
34| abilityName | string | 动画窗口所对应的Ability。|
35| windowBounds | [RRect](#rrect) | 动画窗口实际大小。|
36| missionId  | number | 任务ID。|
37
38## RRect
39
40圆角矩形。
41
42| 参数      | 类型     | 描述 |
43| ------- | ------ | ----------------------- |
44| left  | number | 动画窗口左上角相对于屏幕横坐标。|
45| top | number | 动画窗口左上角相对于屏幕纵坐标。|
46| width | number | 动画窗口宽度大小。|
47| height | number | 动画窗口高度大小。|
48| radius | number | 动画窗口圆角大小。|
49
50## 属性
51
52支持[通用属性](ts-universal-attributes-size.md)。
53
54## 事件
55
56支持[通用事件](ts-universal-events-click.md)。
57
58## 示例
59RemoteWindow需要接收由[windowAnimationManager](../js-apis-windowAnimationManager-sys.md)设置的WindowAnimationController对象传入对应窗口WindowAnimationTarget对象,可以创建一个RemoteWindowExample.ets作为示例组件将RemoteWindow组件和传入的WindowAnimationTarget对象关联封装起来。
60由于RemoteWindow只能用于系统应用程序Launcher中,可以将RemoteWindowExample组件放置于Launcher的EntryView.ets页面的build函数中,编译Launcher, 然后推送Launcher安装包到设备系统中运行。
61
62```ts
63// WindowAnimationControllerImpl.ets 文件
64import { windowAnimationManager } from '@kit.ArkUI';
65
66export default class WindowAnimationControllerImpl implements windowAnimationManager.WindowAnimationController {
67  onStartAppFromLauncher(startingWindowTarget: windowAnimationManager.WindowAnimationTarget,
68                         finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void
69  {
70    console.log(`remote window animation onStartAppFromLauncher`);
71    finishedCallback.onAnimationFinish();
72  }
73
74  onStartAppFromRecent(startingWindowTarget: windowAnimationManager.WindowAnimationTarget,
75                       finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
76    console.log(`remote window animation onStartAppFromRecent`);
77    finishedCallback.onAnimationFinish();
78  }
79
80  onStartAppFromOther(startingWindowTarget: windowAnimationManager.WindowAnimationTarget,
81                      finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
82    console.log(`remote window animation onStartAppFromOther`);
83    finishedCallback.onAnimationFinish();
84  }
85
86  onAppTransition(fromWindowTarget: windowAnimationManager.WindowAnimationTarget,
87                  toWindowTarget: windowAnimationManager.WindowAnimationTarget,
88                  finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void{
89    console.log(`remote window animation onAppTransition`);
90    finishedCallback.onAnimationFinish();
91  }
92
93  onMinimizeWindow(minimizingWindowTarget: windowAnimationManager.WindowAnimationTarget,
94                   finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
95    console.log(`remote window animation onMinimizeWindow`);
96    finishedCallback.onAnimationFinish();
97  }
98
99  onCloseWindow(closingWindowTarget: windowAnimationManager.WindowAnimationTarget,
100                finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
101    console.log(`remote window animation onCloseWindow`);
102    finishedCallback.onAnimationFinish();
103  }
104
105  onScreenUnlock(finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
106    console.log(`remote window animation onScreenUnlock`);
107    finishedCallback.onAnimationFinish();
108  }
109
110  onWindowAnimationTargetsUpdate(fullScreenWindowTarget: windowAnimationManager.WindowAnimationTarget,
111                              floatingWindowTargets: Array<windowAnimationManager.WindowAnimationTarget>): void {
112    console.log('onWindowAnimationTargetsUpdate, the fullScreenWindowTarget is: ' + fullScreenWindowTarget);
113    console.log('onWindowAnimationTargetsUpdate, the floatingWindowTargets are: ' + floatingWindowTargets);
114  }
115}
116```
117
118```ts
119// RemoteWindowExample.ets 文件
120import { windowAnimationManager } from '@kit.ArkUI';
121import WindowAnimationControllerImpl from './WindowAnimationControllerImpl';
122
123@Entry
124@Component
125export default struct RemoteWindowExample {
126  @State target:WindowAnimationTarget | undefined = undefined // 通过windowAnimationManager获取
127
128  aboutToAppear(): void {
129    let controller: WindowAnimationControllerImpl = new WindowAnimationControllerImpl();
130    windowAnimationManager.setController(controller);
131
132    controller.onStartAppFromLauncher = (startingWindowTarget: WindowAnimationTarget,
133                                         finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback) => {
134      console.log(`RemoteWindowExample: remote window animation onStartAppFromLauncher`);
135      this.target = startingWindowTarget;
136      finishedCallback.onAnimationFinish();
137    }
138
139    controller.onStartAppFromRecent = (startingWindowTarget: WindowAnimationTarget,
140                                       finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback) => {
141      console.log(`RemoteWindowExample: remote window animation onStartAppFromRecent`);
142      this.target = startingWindowTarget;
143      finishedCallback.onAnimationFinish();
144    }
145
146    controller.onStartAppFromOther = (startingWindowTarget: WindowAnimationTarget,
147                                      finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback) => {
148      console.log(`RemoteWindowExample: remote window animation onStartAppFromOther`);
149      this.target = startingWindowTarget;
150      finishedCallback.onAnimationFinish();
151    }
152
153    controller.onAppTransition = (fromWindowTarget: WindowAnimationTarget, toWindowTarget: WindowAnimationTarget,
154                                  finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback) => {
155      console.log(`RemoteWindowExample: remote window animation onAppTransition`);
156      this.target = toWindowTarget;
157      finishedCallback.onAnimationFinish();
158    }
159
160    controller.onMinimizeWindow = (minimizingWindowTarget: WindowAnimationTarget,
161                                   finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback) => {
162      console.log(`RemoteWindowExample: remote window animation onMinimizeWindow`);
163      this.target = minimizingWindowTarget;
164      finishedCallback.onAnimationFinish();
165    }
166
167    controller.onCloseWindow = (closingWindowTarget: WindowAnimationTarget,
168                                finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback) => {
169      console.log(`RemoteWindowExample: remote window animation onCloseWindow`);
170      this.target = closingWindowTarget;
171      finishedCallback.onAnimationFinish();
172    }
173  }
174
175  build() {
176    Column() {
177      if(this.target){
178        RemoteWindow(this.target)
179          .scale({ x: 0.5, y: 0.5 }) // 仅用于可见效果的演示目的,正常使用须 .scale({ x: 1, y: 1 })
180          .position({ x: px2vp(this.target?.windowBounds.left), y: px2vp(this.target?.windowBounds.top) })
181          .width(px2vp(this.target?.windowBounds.width))
182          .height(px2vp(this.target?.windowBounds.height))
183      }
184     }
185  }
186}
187```