• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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-component-general-attributes.md)。
53
54## 事件
55
56支持[通用事件](ts-component-general-events.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  private callback: (target: windowAnimationManager.WindowAnimationTarget) => void = () => {}
68
69  OnTargetUpdate(callback: (target: windowAnimationManager.WindowAnimationTarget) => void)
70  {
71    this.callback = callback;
72  }
73
74  private NotifyTargetUpdate(target: windowAnimationManager.WindowAnimationTarget)
75  {
76    this.callback(target);
77  }
78
79  onStartAppFromLauncher(startingWindowTarget: windowAnimationManager.WindowAnimationTarget,
80                         finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void
81  {
82    console.log(`remote window animation onStartAppFromLauncher`);
83    this.NotifyTargetUpdate(startingWindowTarget);
84    finishedCallback.onAnimationFinish();
85  }
86
87  onStartAppFromRecent(startingWindowTarget: windowAnimationManager.WindowAnimationTarget,
88                       finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
89    console.log(`remote window animation onStartAppFromRecent`);
90    this.NotifyTargetUpdate(startingWindowTarget);
91    finishedCallback.onAnimationFinish();
92  }
93
94  onStartAppFromOther(startingWindowTarget: windowAnimationManager.WindowAnimationTarget,
95                      finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
96    console.log(`remote window animation onStartAppFromOther`);
97    this.NotifyTargetUpdate(startingWindowTarget);
98    finishedCallback.onAnimationFinish();
99  }
100
101  onAppTransition(fromWindowTarget: windowAnimationManager.WindowAnimationTarget,
102                  toWindowTarget: windowAnimationManager.WindowAnimationTarget,
103                  finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void{
104    console.log(`remote window animation onAppTransition`);
105    this.NotifyTargetUpdate(fromWindowTarget);
106    finishedCallback.onAnimationFinish();
107  }
108
109  onMinimizeWindow(minimizingWindowTarget: windowAnimationManager.WindowAnimationTarget,
110                   finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
111    console.log(`remote window animation onMinimizeWindow`);
112    this.NotifyTargetUpdate(minimizingWindowTarget);
113    finishedCallback.onAnimationFinish();
114  }
115
116  onCloseWindow(closingWindowTarget: windowAnimationManager.WindowAnimationTarget,
117                finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
118    console.log(`remote window animation onCloseWindow`);
119    this.NotifyTargetUpdate(closingWindowTarget);
120    finishedCallback.onAnimationFinish();
121  }
122
123  onScreenUnlock(finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
124    console.log(`remote window animation onScreenUnlock`);
125    finishedCallback.onAnimationFinish();
126  }
127
128  onWindowAnimationTargetsUpdate(fullScreenWindowTarget: windowAnimationManager.WindowAnimationTarget,
129                              floatingWindowTargets: Array<windowAnimationManager.WindowAnimationTarget>): void {
130    console.log('onWindowAnimationTargetsUpdate, the fullScreenWindowTarget is: ' + fullScreenWindowTarget);
131    console.log('onWindowAnimationTargetsUpdate, the floatingWindowTargets are: ' + floatingWindowTargets);
132  }
133}
134```
135
136```ts
137// RemoteWindowExample.ets 文件
138import { windowAnimationManager } from '@kit.ArkUI';
139import WindowAnimationControllerImpl from './WindowAnimationControllerImpl';
140
141@Entry
142@Component
143export default struct RemoteWindowExample {
144  @State target:WindowAnimationTarget | undefined = undefined // 通过windowAnimationManager获取
145
146  aboutToAppear(): void {
147    let controller: WindowAnimationControllerImpl = new WindowAnimationControllerImpl();
148    windowAnimationManager.setController(controller);
149    controller.OnTargetUpdate((target: windowAnimationManager.WindowAnimationTarget) => {
150      this.target = target;
151    });
152  }
153
154  build() {
155    Column() {
156      if(this.target){
157        RemoteWindow(this.target)
158          .scale({ x: 0.5, y: 0.5 }) // 仅用于可见效果的演示目的,正常使用须 .scale({ x: 1, y: 1 })
159          .position({ x: this.getUIContext().px2vp(this.target?.windowBounds.left), y: this.getUIContext().px2vp(this.target?.windowBounds.top) })
160          .width(this.getUIContext().px2vp(this.target?.windowBounds.width))
161          .height(this.getUIContext().px2vp(this.target?.windowBounds.height))
162      }
163     }
164  }
165}
166```