实现同步应用转换

同步应用转换是 Android 9 中的一项功能,可以改进现有的应用转换架构。当用户打开、关闭应用或在应用之间切换时,SystemUI 或启动器(主屏幕)进程会发送逐帧控制动画的请求,同时保证在视图动画和窗口动画之间进行同步。SystemUI 或启动器在动画过程中绘制新帧时,会在动画应用表面请求一个不同的转换,此转换可以确定应用在屏幕上的组成形式,并标记要与 SystemUI 或启动器目前正在绘制的帧同步的请求(表面事务)。

此过程可以实现无法在 Android 8.x 及更低版本中实现的新应用转换动画。例如,应用启动动画可以将主屏幕图标无缝转换为应用 Surface,并且通知启动动画可以将通知转换为应用 Surface。

示例和来源

请参阅以下参考来了解这项功能。

有关通知启动动画的参考实现,请参阅 ActivityLaunchAnimator.kt

1,实例开发

阅读源码解释:

android.view public class RemoteAnimationAdapter
extends Object
implements Parcelable
描述如何运行远程动画的对象。
远程动画让另一个应用程序控制整个应用程序过渡。 它这样做
使用ActivityOptions.makeRemoteAnimation
使用IWindowManager.overridePendingAppTransitionRemote
注册一个描述动画应该如何运行的RemoteAnimationAdapter :沿着一些元数据,这个对象包含一个回调,当过渡准备好开始时,它从窗口管理器中调用。
窗口管理器将RemoteAnimationTarget列表提供给回调。 每个目标都包含有关正在设置动画的活动以及RemoteAnimationTarget.leash 。 控制应用程序可以像任何其他SurfaceControl一样修改皮带,包括使用SurfaceControl.Transaction.deferTransactionUntil与要绘制的框架同步更新皮带的表面属性的可能性。
当动画完成后,控制应用程序可以调用IRemoteAnimationFinishedCallback是被供应到IRemoteAnimationRunner.onStartAnimation

这应该是控制动画行为的adapter;

(未完待续。。。)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐