Android 窗口动画是 Android 系统动画的一种,当一个非 Activity 主窗口,非壁纸窗口添加或者移除的时候会触发 Android 窗口动画的流程,例如 Toast 的弹出或者移除的过程中就会触发窗口动画。
我把窗口动画的执行流程大概分为以下几步:
- 触发添加窗口动画
- 加载对应的动画资源
- 创建 leash,同时把执行动画的窗口容器 reparent 到 leash 上
- 开始循环执行窗口动画
- 动画结束,把执行动画的窗口重新 reparent 到该容器原来的父节点上。
一、触发添加窗口动画
在 WMS 中最重要的函数 performSurfacePlacementNoTrace() 后期,会遍历一块屏幕上所有的窗口(WindowState),如果该 WindowState 有 surfece 的话,会调用到 WindowState.winAnimator.commitFinishDrawingLocked() 方法。
1、WindowStateAnimator
源码位置:/frameworks/base/services/core/java/com/android/server/wm/WindowStateAnimator.java
boolean commitFi