【Android】Launcher 同步动画开发
实现同步应用转换同步应用转换是 Android 9 中的一项功能,可以改进现有的应用转换架构。当用户打开、关闭应用或在应用之间切换时,SystemUI 或启动器(主屏幕)进程会发送逐帧控制动画的请求,同时保证在视图动画和窗口动画之间进行同步。SystemUI 或启动器在动画过程中绘制新帧时,会在动画应用表面请求一个不同的转换,此转换可以确定应用在屏幕上的组成形式,并标记要与 SystemUI 或启
·
实现同步应用转换
同步应用转换是 Android 9 中的一项功能,可以改进现有的应用转换架构。当用户打开、关闭应用或在应用之间切换时,SystemUI 或启动器(主屏幕)进程会发送逐帧控制动画的请求,同时保证在视图动画和窗口动画之间进行同步。SystemUI 或启动器在动画过程中绘制新帧时,会在动画应用表面请求一个不同的转换,此转换可以确定应用在屏幕上的组成形式,并标记要与 SystemUI 或启动器目前正在绘制的帧同步的请求(表面事务)。
此过程可以实现无法在 Android 8.x 及更低版本中实现的新应用转换动画。例如,应用启动动画可以将主屏幕图标无缝转换为应用 Surface,并且通知启动动画可以将通知转换为应用 Surface。
示例和来源
请参阅以下参考来了解这项功能。
- ActivityOptions.makeRemoteAnimation
- RemoteAnimationAdapter
- RemoteAnimationRunner
- Activity.registerRemoteAnimations
有关通知启动动画的参考实现,请参阅 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;
(未完待续。。。)
更多推荐
已为社区贡献1条内容
所有评论(0)