在 Launcher3 执行涉及其他应用窗口(即“远程窗口”)的动画时,例如“点击桌面图标启动应用”或“从应用上滑回到桌面”的过渡动画,SurfaceControl 扮演着至关重要的角色。它是实现这些跨进程、高性能、精确定制动画的核心技术。
SurfaceControl在源码中的使用
Launcher3中有几处非常经典的使用SurfaceControl的地方。

在分屏应用进入到最近任务,或者从最近任务启动应用时,涉及到分屏应用中间的bar条,这个bar条是属于SystemUI进程的,在Launcher中显示就属于远程窗口,因此需要通过SurfaceControl来进行更新操作。
启动分屏应用时bar条由隐藏到最终显示的过程就是通过SurfaceControl控制bar条的透明度来实现的。
源码如下:
public static ValueAnimator createSplitAuxiliarySurfacesAnimator(
@Nullable RemoteAnimationTarget[] nonApps, boolean shown,
@Nullable Consumer<ValueAnimator> animatorHandler) {
if (nonApps == null || nonApps.length == 0) {
return null;
}
List<SurfaceControl> auxiliarySurfaces = new ArrayList<>();
for (RemoteAnimationTarget target : nonApps) {
final SurfaceControl leash = target.leash;
if (target.windowType == TYPE_DOCK_DIVIDER && leash != null &

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



