Acessar o progresso manualmente

O elemento combinável PredictiveBackHandler no Jetpack Compose permite interceptar o gesto de voltar e acessar o progresso dele. É possível reagir ao gesto de voltar do usuário em tempo real, criando animações ou comportamentos personalizados com base na distância da gestuação do usuário.

Para usar o PredictiveBackHandler, verifique se você está usando androidx.activity:activity:1.6.0 ou mais recente.

PredictiveBackHandler fornece um Flow<BackEventCompat> que emite eventos representando o progresso do gesto de volta. Cada evento contém informações como:

  • progress: um valor flutuante entre 0 e 1 que indica o progresso do gesto de volta (0 = gesto iniciado, 1 = gesto concluído).
  • touchX e touchY: as coordenadas X e Y do evento de toque.

O snippet a seguir mostra o uso básico de 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
    }
}

Exemplo: integrar com uma gaveta de navegação

Este exemplo demonstra como implementar uma animação personalizada no app usando PredictiveBackHandler para criar uma interação suave com uma gaveta de navegação em resposta a gestos de volta no JetLagged:

Figura 5. Gaveta de navegação com suporte à volta preditiva.

Neste exemplo, PredictiveBackHandler é usado para:

  • Acompanhe o progresso do gesto de volta.
  • Atualize o translationX da gaveta com base no progresso do gesto.
  • Use um velocityTracker para abrir ou fechar a gaveta com base na velocidade do gesto quando ele for concluído ou cancelado.