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```