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

Компонент 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
        throw e
    }
}

Пример: Интеграция с выдвижной навигационной панелью.

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

Рисунок 5. Выдвижная панель навигации с функцией прогнозируемой поддержки спины.

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

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