При использовании системных API для возврата назад вы можете включить анимацию в приложении и поддержку пользовательских переходов.
После того как вы включите эту функцию, в приложении будут показываться анимации возврата на главный экран, перехода между объектами activity и перехода между задачами.
В видео показан пример анимации предпросмотра для жеста "Назад" при переходе между действиями и возврате на главный экран в приложении "Настройки" на Android.
- В ней пользователь возвращается к предыдущему экрану настроек, проводя по экрану назад. Это пример анимации между действиями.
- Теперь на предыдущем экране пользователь начинает проводить пальцем назад во второй раз, показывая предварительный просмотр главного экрана с его обоями — пример анимации возврата домой.
- Пользователь продолжает проводить вправо, и на экране появляется анимация, показывающая, как окно уменьшается до значка на главном экране.
- Пользователь вернулся на главный экран.
Подробнее о том, как добавить поддержку предпросмотра для жеста "Назад"…
Добавьте собственные переходы и анимацию в приложении
Вы можете создавать собственные анимации и переходы свойств в приложении, собственные анимации между действиями и собственные анимации между фрагментами с помощью жестов прогнозирования назад, используя Compose или Views. Чтобы узнать, как создавать переходы с помощью представлений, прочитайте статью Как добавить поддержку анимации предпросмотра для жеста "Назад" в представлениях.
Как добавить собственные переходы в Jetpack Compose
Вы можете использовать PredictiveBackHandler для обработки жестов "Назад" в Jetpack Compose, чтобы создавать собственные переходы в приложении. Эта функция доступна в androidx.activity:activity-compose:1.8.0-alpha01 и более поздних версиях.
PredictiveBackHandler предоставляет лямбда-выражение обратного вызова, которое возвращает Flow<BackEventCompat>, генерирующий события, когда пользователь проводит пальцем от края экрана.
Эти события предоставляют информацию о положении касания пользователя, крае пролистывания и, что наиболее важно, progress, который можно использовать для анимации компонентов в рамках обработки жеста назад.
В следующем фрагменте кода показано, как использовать PredictiveBackHandler для анимации уменьшения масштаба и удаления Surface по мере выполнения жеста.
@Composable fun DetailScreen(onBack: () -> Unit) { var scale by remember { mutableFloatStateOf(1f) } var xOffset by remember { mutableFloatStateOf(0f) } val scope = rememberCoroutineScope() PredictiveBackHandler { progressFlow -> try { progressFlow.collectLatest { backEvent -> scale = 1f - backEvent.progress xOffset = backEvent.progress * 100f } // User completed gesture. onBack() } catch (e: CancellationException) { // User cancelled gesture. // Animate scale and xOffset back to 1f and 0f respectively. scope.launch { animate(scale, 1f) { value, _ -> scale = value } } scope.launch { animate(xOffset, 0f) { value, _ -> xOffset = value } } } } Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { Surface( modifier = Modifier .size(200.dp) .scale(scale) .offset { IntOffset(x = xOffset.dp.roundToPx(), y = 0) }, color = Color.Blue ) {} } }