1# @ohos.animation.windowAnimationManager (窗口动画管理)(系统接口)
2
3窗口动画管理器,可以监听应用启动退出时应用的动画窗口,提供启动退出过程中控件动画和应用窗口联动动画能力。
4
5>  **说明:**
6>
7>  - 该组件从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9>  - 本模块接口为系统接口。
10
11## 导入模块
12
13```ts
14import { windowAnimationManager } from '@kit.ArkUI';
15```
16
17## windowAnimationManager.setController
18
19setController(controller: WindowAnimationController): void
20
21设置窗口动画控制器。窗口动画控制器的说明请参考[WindowAnimationController](#windowanimationcontroller)。
22
23在使用windowAnimationManager的其他接口前,需要预先调用本接口设置窗口动画控制器。
24
25**系统能力:** SystemCapability.WindowManager.WindowManager.Core
26
27**参数:**
28
29| 参数名 | 类型 | 必填 | 说明 |
30| -------- | -------- | -------- | -------- |
31| controller | [WindowAnimationController](#windowanimationcontroller) | 是 | 窗口动画的控制器。|
32
33**示例:**
34
35```ts
36let controller: windowAnimationManager.WindowAnimationController = {
37    onStartAppFromLauncher(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
38        console.log('onStartAppFromLauncher, the startingWindowTarget is: ' + startingWindowTarget);
39        finishCallback.onAnimationFinish();
40	  },
41    onStartAppFromRecent(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
42        console.log('onStartAppFromRecent, the startingWindowTarget is: ' + startingWindowTarget);
43        finishCallback.onAnimationFinish();
44    },
45    onStartAppFromOther(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
46        console.log('onStartAppFromOther, the startingWindowTarget is: ' + startingWindowTarget);
47        finishCallback.onAnimationFinish();
48    },
49    onAppTransition(fromWindowTarget: windowAnimationManager.WindowAnimationTarget, toWindowTarget: WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
50        console.log('onAppTransition, the fromWindowTarget is: ' + fromWindowTarget);
51        console.log('onAppTransition, the toWindowTarget is: ' + toWindowTarget);
52        finishCallback.onAnimationFinish();
53    },
54    onMinimizeWindow(minimizingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
55        console.log('onMinimizeWindow, the minimizingWindowTarget is: ' + minimizingWindowTarget);
56        finishCallback.onAnimationFinish();
57    },
58    onCloseWindow(closingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
59        console.log('onCloseWindow, the closingWindowTarget is: ' + closingWindowTarget);
60        finishCallback.onAnimationFinish();
61    },
62    onScreenUnlock(finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
63        console.log('onScreenUnlock called');
64        finishCallback.onAnimationFinish();
65    },
66    onWindowAnimationTargetsUpdate(fullScreenWindowTarget: windowAnimationManager.WindowAnimationTarget, floatingWindowTargets: Array<windowAnimationManager.WindowAnimationTarget>): void {
67        console.log('onWindowAnimationTargetsUpdate, the fullScreenWindowTarget is: ' + fullScreenWindowTarget);
68        console.log('onWindowAnimationTargetsUpdate, the floatingWindowTargets are: ' + floatingWindowTargets);
69    }
70}
71
72windowAnimationManager.setController(controller);
73```
74
75## windowAnimationManager.minimizeWindowWithAnimation
76
77minimizeWindowWithAnimation(windowTarget: WindowAnimationTarget, callback: AsyncCallback&lt;WindowAnimationFinishedCallback&gt;): void
78
79最小化动画目标窗口,并返回动画完成的回调。使用callback异步回调
80
81**系统能力:** SystemCapability.WindowManager.WindowManager.Core
82
83**参数:**
84
85| 参数名 | 类型 | 必填 | 说明 |
86| -------- | -------- | -------- | -------- |
87| windowTarget | [WindowAnimationTarget](#windowanimationtarget) | 是 | 动画目标窗口。|
88| callback | AsyncCallback&lt;[WindowAnimationFinishedCallback](#windowanimationfinishedcallback)&gt; | 是 | 回调函数。当最小化动画目标窗口成功,err为undefined,data为获取到的WindowAnimationFinishedCallback;否则返回err.code为-1,data为undefined。|
89
90**示例:**
91
92```ts
93import { BusinessError } from '@kit.BasicServicesKit';
94
95let target: windowAnimationManager.WindowAnimationTarget | null = null;
96let controller: windowAnimationManager.WindowAnimationController = {
97    onStartAppFromLauncher(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
98        console.log('onStartAppFromLauncher, the startingWindowTarget is: ' + startingWindowTarget);
99        target = startingWindowTarget;
100        finishCallback.onAnimationFinish();
101	  },
102    onStartAppFromRecent(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
103        console.log('onStartAppFromRecent, the startingWindowTarget is: ' + startingWindowTarget);
104        target = startingWindowTarget;
105        finishCallback.onAnimationFinish();
106    },
107    onStartAppFromOther(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
108        console.log('onStartAppFromOther, the startingWindowTarget is: ' + startingWindowTarget);
109        target = startingWindowTarget;
110        finishCallback.onAnimationFinish();
111    },
112    onAppTransition(fromWindowTarget: windowAnimationManager.WindowAnimationTarget, toWindowTarget: WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
113        console.log('onAppTransition, the fromWindowTarget is: ' + fromWindowTarget);
114        console.log('onAppTransition, the toWindowTarget is: ' + toWindowTarget);
115        target = toWindowTarget;
116        finishCallback.onAnimationFinish();
117    },
118    onMinimizeWindow(minimizingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
119        console.log('onMinimizeWindow, the minimizingWindowTarget is: ' + minimizingWindowTarget);
120        target = minimizingWindowTarget;
121        finishCallback.onAnimationFinish();
122    },
123    onCloseWindow(closingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
124        console.log('onCloseWindow, the closingWindowTarget is: ' + closingWindowTarget);
125        target = closingWindowTarget;
126        finishCallback.onAnimationFinish();
127    },
128    onScreenUnlock(finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
129        console.log('onScreenUnlock called');
130        finishCallback.onAnimationFinish();
131    },
132    onWindowAnimationTargetsUpdate(fullScreenWindowTarget: windowAnimationManager.WindowAnimationTarget, floatingWindowTargets: Array<windowAnimationManager.WindowAnimationTarget>): void {
133        console.log('onWindowAnimationTargetsUpdate, the fullScreenWindowTarget is: ' + fullScreenWindowTarget);
134        console.log('onWindowAnimationTargetsUpdate, the floatingWindowTargets are: ' + floatingWindowTargets);
135        target = fullScreenWindowTarget;
136    }
137}
138
139windowAnimationManager.setController(controller);
140
141let finishedCallback: windowAnimationManager.WindowAnimationFinishedCallback;
142windowAnimationManager.minimizeWindowWithAnimation(target, (err: BusinessError, data: windowAnimationManager.WindowAnimationFinishedCallback) => {
143    if (err) {
144        console.error('Failed to minimize the window target. Cause: ' + JSON.stringify(err));
145        return;
146    }
147    finishedCallback = data;
148
149    // 在收到回调后,需要开始进行窗口动画,在窗口动画结束后,调用onAnimationFinish回调
150    finishedCallback.onAnimationFinish();
151});
152```
153
154## windowAnimationManager.minimizeWindowWithAnimation
155
156minimizeWindowWithAnimation(windowTarget: WindowAnimationTarget): Promise&lt;WindowAnimationFinishedCallback&gt;
157
158最小化动画目标窗口,并返回动画完成的回调。使用Promise异步回调。
159
160**系统能力:** SystemCapability.WindowManager.WindowManager.Core
161
162**参数:**
163
164| 参数名 | 类型 | 必填 | 说明 |
165| -------- | -------- | -------- | -------- |
166| windowTarget | [WindowAnimationTarget](#windowanimationtarget) | 是 | 动画目标窗口。|
167
168**返回值:**
169
170| 类型                             | 说明                                    |
171| -------------------------------- | --------------------------------------- |
172| Promise&lt;[WindowAnimationFinishedCallback](#windowanimationfinishedcallback)&gt; | Promise对象,返回动画完成的回调。 |
173
174
175**示例:**
176
177```ts
178import { BusinessError } from '@kit.BasicServicesKit';
179
180let target: windowAnimationManager.WindowAnimationTarget | null  = null;
181let controller: windowAnimationManager.WindowAnimationController = {
182    onStartAppFromLauncher(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
183        console.log('onStartAppFromLauncher, the startingWindowTarget is: ' + startingWindowTarget);
184        finishCallback.onAnimationFinish();
185	  },
186    onStartAppFromRecent(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
187        console.log('onStartAppFromRecent, the startingWindowTarget is: ' + startingWindowTarget);
188        finishCallback.onAnimationFinish();
189    },
190    onStartAppFromOther(startingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
191        console.log('onStartAppFromOther, the startingWindowTarget is: ' + startingWindowTarget);
192        finishCallback.onAnimationFinish();
193    },
194    onAppTransition(fromWindowTarget: windowAnimationManager.WindowAnimationTarget, toWindowTarget: WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
195        console.log('onAppTransition, the fromWindowTarget is: ' + fromWindowTarget);
196        console.log('onAppTransition, the toWindowTarget is: ' + toWindowTarget);
197        finishCallback.onAnimationFinish();
198    },
199    onMinimizeWindow(minimizingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
200        console.log('onMinimizeWindow, the minimizingWindowTarget is: ' + minimizingWindowTarget);
201        finishCallback.onAnimationFinish();
202    },
203    onCloseWindow(closingWindowTarget: windowAnimationManager.WindowAnimationTarget, finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
204        console.log('onCloseWindow, the closingWindowTarget is: ' + closingWindowTarget);
205        finishCallback.onAnimationFinish();
206    },
207    onScreenUnlock(finishCallback: windowAnimationManager.WindowAnimationFinishedCallback): void {
208        console.log('onScreenUnlock called');
209        finishCallback.onAnimationFinish();
210    },
211    onWindowAnimationTargetsUpdate(fullScreenWindowTarget: windowAnimationManager.WindowAnimationTarget, floatingWindowTargets: Array<windowAnimationManager.WindowAnimationTarget>): void {
212        console.log('onWindowAnimationTargetsUpdate, the fullScreenWindowTarget is: ' + fullScreenWindowTarget);
213        console.log('onWindowAnimationTargetsUpdate, the floatingWindowTargets are: ' + floatingWindowTargets);
214    }
215}
216
217windowAnimationManager.setController(controller);
218
219let promise: Promise<windowAnimationManager.WindowAnimationFinishedCallback> = windowAnimationManager.minimizeWindowWithAnimation(target);
220promise.then((data: windowAnimationManager.WindowAnimationFinishedCallback) => {
221    data.onAnimationFinish();
222}).catch((err: BusinessError)=>{
223    console.error('Failed to minimize the window target. Cause: ' + JSON.stringify(err));
224    return;
225});
226```
227
228## WindowAnimationController
229
230窗口动画控制器。在创建一个WindowAnimationController对象时,需要实现其中的所有回调函数。
231
232**系统能力:** SystemCapability.WindowManager.WindowManager.Core
233
234### onStartAppFromLauncher
235
236onStartAppFromLauncher(startingWindowTarget: WindowAnimationTarget,finishCallback: WindowAnimationFinishedCallback): void
237
238从桌面启动应用时的回调。
239
240**系统能力:** SystemCapability.WindowManager.WindowManager.Core
241
242| 参数名               | 类型                                                         | 必填 | 说明               |
243| -------------------- | ------------------------------------------------------------ | ---- | ------------------ |
244| startingWindowTarget | [WindowAnimationTarget](#windowanimationtarget)              | 是   | 动画目标窗口。     |
245| finishCallback       | [WindowAnimationFinishedCallback](#windowanimationfinishedcallback) | 是   | 动画完成后的回调。 |
246
247**示例:**
248
249请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
250
251### onStartAppFromRecent
252
253onStartAppFromRecent(startingWindowTarget: WindowAnimationTarget,finishCallback:WindowAnimationFinishedCallback): void
254
255从最近任务列表启动应用时的回调。
256
257**系统能力:** SystemCapability.WindowManager.WindowManager.Core
258
259| 参数名               | 类型                                                         | 必填 | 说明               |
260| -------------------- | ------------------------------------------------------------ | ---- | ------------------ |
261| startingWindowTarget | [WindowAnimationTarget](#windowanimationtarget)              | 是   | 动画目标窗口。     |
262| finishCallback       | [WindowAnimationFinishedCallback](#windowanimationfinishedcallback) | 是   | 动画完成后的回调。 |
263
264**示例:**
265
266请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
267
268### onStartAppFromOther
269
270onStartAppFromOther(startingWindowTarget: WindowAnimationTarget,finishCallback: WindowAnimationFinishedCallback): void
271
272从除了桌面和最近任务列表以外其他地方启动应用时的回调。
273
274**系统能力:** SystemCapability.WindowManager.WindowManager.Core
275
276| 参数名               | 类型                                                         | 必填 | 说明               |
277| -------------------- | ------------------------------------------------------------ | ---- | ------------------ |
278| startingWindowTarget | [WindowAnimationTarget](#windowanimationtarget)              | 是   | 动画目标窗口。     |
279| finishCallback       | [WindowAnimationFinishedCallback](#windowanimationfinishedcallback) | 是   | 动画完成后的回调。 |
280
281**示例:**
282
283请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
284
285### onAppTransition
286
287onAppTransition(fromWindowTarget: WindowAnimationTarget, toWindowTarget: WindowAnimationTarget,finishCallback: WindowAnimationFinishedCallback): void
288
289应用转场时的回调。
290
291**系统能力:** SystemCapability.WindowManager.WindowManager.Core
292
293| 参数名               | 类型                            | 必填 | 说明             |
294| -------------------- | ------------------------------- | ---- | ---------------- |
295| fromWindowTarget | [WindowAnimationTarget](#windowanimationtarget)           | 是   | 转场前的动画窗口。 |
296| toWindowTarget       | [WindowAnimationTarget](#windowanimationtarget) | 是   | 转场后的动画窗口。 |
297| finishCallback | [WindowAnimationFinishedCallback](#windowanimationfinishedcallback) | 是   | 动画完成后的回调。 |
298
299**示例:**
300
301请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
302
303### onMinimizeWindow
304
305onMinimizeWindow(minimizingWindowTarget: WindowAnimationTarget,finishCallback: WindowAnimationFinishedCallback): void
306
307最小化窗口时的回调。
308
309**系统能力:** SystemCapability.WindowManager.WindowManager.Core
310
311| 参数名               | 类型                            | 必填 | 说明             |
312| -------------------- | ------------------------------- | ---- | ---------------- |
313| minimizingWindowTarget | [WindowAnimationTarget](#windowanimationtarget)           | 是   | 动画目标窗口。    |
314| finishCallback       | [WindowAnimationFinishedCallback](#windowanimationfinishedcallback) | 是   | 动画完成后的回调。 |
315
316**示例:**
317
318请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
319
320### onCloseWindow
321
322onCloseWindow(closingWindowTarget: WindowAnimationTarget,finishCallback: WindowAnimationFinishedCallback): void
323
324关闭窗口时的回调。
325
326**系统能力:** SystemCapability.WindowManager.WindowManager.Core
327
328| 参数名               | 类型                            | 必填 | 说明             |
329| -------------------- | ------------------------------- | ---- | ---------------- |
330| closingWindowTarget | [WindowAnimationTarget](#windowanimationtarget)           | 是   | 动画目标窗口。    |
331| finishCallback       | [WindowAnimationFinishedCallback](#windowanimationfinishedcallback) | 是   | 动画完成后的回调。 |
332
333**示例:**
334
335请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
336
337### onScreenUnlock
338
339onScreenUnlock(finishCallback: [WindowAnimationFinishedCallback](#windowanimationfinishedcallback)): void
340
341屏幕解锁时的回调。
342
343**系统能力:** SystemCapability.WindowManager.WindowManager.Core
344
345| 参数名         | 类型                                                         | 必填 | 说明               |
346| -------------- | ------------------------------------------------------------ | ---- | ------------------ |
347| finishCallback | [WindowAnimationFinishedCallback](#windowanimationfinishedcallback) | 是   | 动画完成后的回调。 |
348
349**示例:**
350
351请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
352
353### onWindowAnimationTargetsUpdate
354
355onWindowAnimationTargetsUpdate(fullScreenWindowTarget: WindowAnimationTarget, floatingWindowTargets: Array&lt;WindowAnimationTarget&gt;): void
356
357动画目标窗口更新时的回调
358
359**系统能力:** SystemCapability.WindowManager.WindowManager.Core
360
361| 参数名               | 类型                            | 必填 | 说明             |
362| -------------------- | ------------------------------- | ---- | ---------------- |
363| fullScreenWindowTarget | [WindowAnimationTarget](#windowanimationtarget) | 是   | 全屏状态的动画目标窗口。|
364| floatingWindowTargets| Array&lt;[WindowAnimationTarget](#windowanimationtarget)&gt; | 是   | 悬浮状态的动画目标窗口。 |
365
366**示例:**
367
368请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
369
370## WindowAnimationFinishedCallback
371动画完成后的回调。
372
373### onAnimationFinish
374
375onAnimationFinish():void
376
377结束本次动画。
378
379**系统能力:** SystemCapability.WindowManager.WindowManager.Core
380
381**示例:**
382
383请参考[windowAnimationManager.setController](#windowanimationmanagersetcontroller)的示例代码。
384
385## WindowAnimationTarget
386动画目标窗口,用来实现动画。
387
388**系统能力:** SystemCapability.WindowManager.WindowManager.Core
389
390| 名称      | 类型     | 必填 | 说明 |
391| ------- | ------ | ------ | ----------------------- |
392| bundleName  | string | 是 |动画目标窗口所对应的包名。 |
393| abilityName | string | 是 |动画目标窗口所对应的Ability名称。 |
394| windowBounds | [RRect](#rrect) | 是 |动画目标窗口所对应的实际大小。 |
395| missionId  | number | 是 |任务ID,多任务中用于与ability进行匹配。|
396
397## RRect
398圆角矩形。
399
400**系统能力:** SystemCapability.WindowManager.WindowManager.Core
401
402| 名称      | 类型     | 必填 | 说明 |
403| ------- | ------ | ------|----------------------- |
404| left  | number | 是 |动画目标窗口左上角相对于屏幕的横坐标。 |
405| top | number | 是 |动画目标窗口左上角相对于屏幕的纵坐标。 |
406| width | number | 是 |动画目标窗口的宽度大小。 |
407| height | number | 是 |动画目标窗口的高度大小。 |
408| radius | number | 是 |动画目标窗口的圆角大小。 |