Доступ к прогрессу вручную

PredictiveBackHandler , компонуемый в Jetpack Compose, позволяет перехватывать жест «назад» и получать доступ к его прогрессу. Вы можете реагировать на жест «назад» пользователя в режиме реального времени, создавая пользовательские анимации или поведения на основе того, как далеко пользователь проводит пальцем.

Чтобы использовать PredictiveBackHandler , убедитесь, что вы используете androidx.activity:activity:1.6.0 или выше.

PredictiveBackHandler предоставляет Flow<BackEventCompat> , который генерирует события, представляющие ход выполнения жеста «назад». Каждое событие содержит такую ​​информацию, как:

  • progress : плавающее значение от 0 до 1, указывающее ход выполнения жеста «назад» (0 = жест начат, 1 = жест завершен).
  • touchX и touchY : координаты X и Y события касания.

В следующем фрагменте показано базовое использование PredictiveBackHandler :

PredictiveBackHandler(true) { progress: Flow<BackEventCompat> ->
    // code for gesture back started
    try {
        progress.collect { backEvent ->
            // code for progress
            boxScale = 1F - (1F * backEvent.progress)
        }
        // code for completion
        boxScale = 0F
    } catch (e: CancellationException) {
        // code for cancellation
        boxScale = 1F
    }
}

Пример: Интеграция с панелью навигации

В этом примере показано, как реализовать пользовательскую анимацию в приложении с помощью PredictiveBackHandler для создания плавного взаимодействия с панелью навигации в ответ на жесты «назад» в JetLagged :

Рисунок 5. Навигационный ящик с прогнозируемой поддержкой спины.

В этом примере PredictiveBackHandler используется для:

  • Отслеживайте ход выполнения жеста «назад».
  • Обновить translationX выдвижной панели на основе хода выполнения жеста.
  • Используйте velocityTracker для плавного открытия или закрытия ящика в зависимости от скорости жеста при его завершении или отмене.