При использовании системных API вы можете включить получение внутриприложенийной анимации и поддержку пользовательских переходов.
После включения этой функции ваше приложение будет отображать анимацию при возвращении на главный экран, а также анимацию для разных видов активности и задач.
В видеоролике представлен краткий пример анимаций возврата назад для переключения между различными активностями и возврата на главный экран с помощью приложения «Настройки» Android.
- В анимации пользователь проводит пальцем назад, чтобы вернуться к предыдущему экрану настроек — это пример анимации, затрагивающей несколько действий.
- Теперь на предыдущем экране пользователь начинает второй раз проводить пальцем назад, отображая предварительный просмотр главного экрана с его обоями — пример анимации возвращения на главный экран.
- Пользователь продолжает проводить пальцем вправо, при этом отображается анимация уменьшения окна до значка на главном экране.
- Пользователь полностью вернулся на главный экран.
Узнайте больше о том, как добавить поддержку предиктивных жестов «назад» .
Add custom in-app transitions and animations
Вы можете создавать пользовательские анимации и переходы для свойств приложения, пользовательские анимации для разных активностей и пользовательские анимации для разных фрагментов с помощью предиктивных жестов возврата.
Добавьте пользовательские переходы в Jetpack Compose.
В Jetpack Compose можно использовать PredictiveBackHandler для обработки предиктивных жестов возврата назад, что позволяет создавать пользовательские переходы внутри приложения. Эта функция доступна в версии 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(x = xOffset.dp, y = 0.dp), color = Color.Blue ) {} } }