Monitorare manualmente l'avanzamento dell'accesso

Il PredictiveBackHandler composable in Jetpack Compose ti consente di intercettare il gesto Indietro e di accedere al suo avanzamento. Puoi reagire al gesto Indietro dell'utente in tempo reale, creando animazioni o comportamenti personalizzati in base alla distanza percorsa dall'utente con lo swipe.

Per utilizzare PredictiveBackHandler, assicurati di utilizzare androidx.activity:activity:1.6.0 o versioni successive.

PredictiveBackHandler fornisce un Flow<BackEventCompat> che genera eventi che rappresentano l'avanzamento del gesto Indietro. Ogni evento contiene informazioni come:

  • progress: un valore float compreso tra 0 e 1 che indica l'avanzamento del gesto Indietro (0 = gesto iniziato, 1 = gesto completato).
  • touchX e touchY: le coordinate X e Y dell'evento touch.

Il seguente snippet mostra l'utilizzo di base di 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
    }
}

Esempio: integrare con un riquadro di navigazione a scomparsa

Questo esempio mostra come implementare un'animazione in-app personalizzata utilizzando PredictiveBackHandler per creare un'interazione fluida con un riquadro di navigazione in risposta ai gesti Indietro in JetLagged:

Figura 5. Riquadro di navigazione a scomparsa con supporto per Indietro predittivo.

In questo esempio, PredictiveBackHandler viene utilizzato per:

  • Monitorare l'avanzamento del gesto Indietro.
  • Aggiornare translationX del riquadro a scomparsa in base all'avanzamento del gesto.
  • Utilizzare un velocityTracker per aprire o chiudere il riquadro a scomparsa in modo fluido in base alla velocità del gesto quando il gesto viene completato o annullato.