如果您已将应用迁移到新的系统返回 API,则可以选择启用预测性返回,以自动接收应用内动画并支持自定义转换。
添加对内置应用内动画的支持
选择启用后,您的应用会显示“返回主屏幕”、跨 activity 和跨任务的动画。
您还可将 Material 组件依赖项升级到 v1.10.0 的 MDC Android,以接收 Material 组件动画,比如:
该视频展示了使用 Android 的“设置”应用实现的跨 activity 和“返回主屏幕”预测性返回动画的简短示例。
- 在动画中,用户滑回先前的“设置”界面,这是一个跨 activity 动画示例。
- 现在,在上一个界面上,用户又开始再滑动一次,系统会显示主屏幕及壁纸的预览,即“返回主屏幕”动画的示例。
- 用户继续向右滑动,此时系统显示了窗口如何缩小为主屏幕上的图标的动画。
- 用户现已完全返回主屏幕。
详细了解如何支持预测性返回。
添加自定义应用内转换和动画
借助 Android 14,您可为应用的自定义时刻创建自定义应用内转换和动画。
使用一组预测性返回进度 API 开发自定义的应用内转换和动画。
在 AndroidX Activity 1.8.0-alpha01 或更高版本中,您可向应用中的预测性返回手势添加自定义转换效果。在 OnBackPressedCallback
中,我们引入了 handleOnBackProgressed
、handleOnBackCancelled
和 handleOnBackStarted
方法,以便在用户向下滑动时为对象添加动画效果。如果您需要实现的效果在自定义程度上超过了新系统动画或 Material 组件动画提供的默认动画,请使用这些方法。
以下模拟显示了使用 OnBackPressedCallback
实现的自定义动画(在本例中是一个简单的框)。在模拟中,该框会缩小并沿滑动方向移动。
以下示例说明了如何实现此功能。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
val box = findViewById<View>(R.id.box)
val screenWidth = Resources.getSystem().displayMetrics.widthPixels
val maxXShift = (screenWidth / 20)
// For the purposes of demonstration, this code snippet presents the
// callback as being always enabled. However, in practice it's always a
// good idea to always disable the callback when you're ready for the
// system to handle back events.
val callback = object : OnBackPressedCallback(enabled = true) {
override fun handleOnBackProgressed(backEvent: BackEvent) {
when (backEvent.swipeEdge) {
BackEvent.EDGE_LEFT ->
box.translationX = backEvent.progress * maxXShift
BackEvent.EDGE_RIGHT ->
box.translationX = -(backEvent.progress * maxXShift)
}
box.scaleX = 1F - (0.1F * backEvent.progress)
box.scaleY = 1F - (0.1F * backEvent.progress)
}
override fun handleOnBackPressed() {
// Do something after the back gesture completes.
}
override fun handleOnBackCancelled() {
// e.g. reset box to the original position
}
}
this.onBackPressedDispatcher.addCallback(callback)
}
}
我们希望大多数应用都使用向后兼容的 AndroidX API,但 OnBackAnimationCallback
中也有类似的平台 API 可用于在 Android 14 开发者预览版 1 及更高版本中进行测试。
在 Android 14 及更高版本上添加自定义 activity 转换
为确保自定义 activity 转换在 Android 14 及更高版本上支持预测性返回,您可以使用 overrideActivityTransition
而非 overridePendingTransition
。这意味着,转换效果会在用户滑回时播放。
举个例子,假设在返回堆栈中 activity B 位于 activity A 之上。您可使用以下方式处理自定义 activity 动画:
- 在 activity B 的
onCreate
方法中调用开始/结束转换效果。 - 当用户导航到 activity B 时,使用
OVERRIDE_TRANSITION_OPEN
。当用户滑回 activity A 时,使用OVERRIDE_TRANSITION_CLOSE
。 指定
OVERRIDE_TRANSITION_CLOSE
时,enterAnim
是 activity A 的进入动画,而exitAnim
是 activity B 的退出动画。