Как отслеживать прогресс вручную

Компонуемый элемент 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, чтобы плавно открывать или закрывать выдвигающуюся панель в зависимости от скорости жеста, когда он завершен или отменен.