Добавить поддержку прогнозируемой анимации движения назад.Добавить поддержку прогнозируемой анимации движения назад.

При использовании системных API вы можете включить получение внутриприложенийной анимации и поддержку пользовательских переходов.

Видео 1: Анимация движения спины с функцией прогнозирования

После включения этой функции ваше приложение будет отображать анимацию при возвращении на главный экран, а также анимацию для разных видов активности и задач.

В видеоролике представлен краткий пример анимаций возврата назад для переключения между различными активностями и возврата на главный экран с помощью приложения «Настройки» Android.

  1. В анимации пользователь проводит пальцем назад, чтобы вернуться к предыдущему экрану настроек — это пример анимации, затрагивающей несколько действий.
  2. Теперь на предыдущем экране пользователь начинает второй раз проводить пальцем назад, отображая предварительный просмотр главного экрана с его обоями — пример анимации возвращения на главный экран.
  3. Пользователь продолжает проводить пальцем вправо, при этом отображается анимация уменьшения окна до значка на главном экране.
  4. Пользователь полностью вернулся на главный экран.

Узнайте больше о том, как добавить поддержку предиктивных жестов «назад» .

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
        ) {}
    }
}