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 que o usuário desliza.

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

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

  • progress: um valor flutuante entre 0 e 1 que indica o progresso do gesto de voltar (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
        throw e
    }
}

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 um menu de navegação lateral em resposta a gestos de voltar no JetLagged (link em inglês):

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

Neste exemplo, PredictiveBackHandler é usado para:

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