Informazioni sulle fasi di scorrimento

Lo scorrimento è suddiviso in più fasi. Il delta di input viene inviato tramite una sequenza di fasi per garantire che ogni fase abbia l'opportunità di consumare o reagire al movimento.

Durante questo ciclo, sia il delta di input disponibile sia il delta di input consumato vengono trasmessi a ogni passaggio. In questo modo, ogni fase dispone del contesto completo necessario per reagire, utilizzare o ascoltare l'evento di scorrimento.

Diagramma del ciclo di scorrimento che mostra le fasi di scorrimento di un evento di scorrimento dell'utente
Figura 1. Un diagramma del ciclo di scorrimento che mostra le fasi di un evento di scorrimento dell'utente.

Come illustrato nella Figura 1, la procedura di scorrimento segue questo ordine esatto:

  1. Overscroll: riceve per primo il delta di input iniziale, il che offre all'overscroll la possibilità di reagire per primo (ad esempio, rilassando un effetto di allungamento attivo).
  2. Pre-scorrimento nidificato:offre l'opportunità di reagire al delta di input prima della fase di scorrimento. In questa fase, potrebbe essere consumato un delta di input o potrebbe essere semplicemente monitorato per attivare modifiche alla UI, ad esempio la compressione o l'espansione di una barra dell'app.
  3. Trasforma il delta di input: regola il segno del delta di input non elaborato in base all'orientamento e alla direzione del layout per garantire un comportamento di scorrimento naturale. Per maggiori informazioni, consulta la sezione Trasforma il delta di input.
  4. Scorrimento: questa fase riceve il delta di input disponibile e non utilizzato, adattato in base alla configurazione del contenitore di scorrimento. In genere, utilizza questo delta per aggiornare il proprio offset di scorrimento.
  5. Ripristina il delta dell'input non elaborato: ripristina il delta disponibile e consumato dalla fase di scorrimento al segno del delta dell'input non elaborato originale.
  6. Post-scorrimento nidificato:questa fase reagisce dopo il completamento della fase di scorrimento principale, ricevendo i delta disponibili e consumati appena aggiornati. Può consumare qualsiasi input disponibile rimanente o utilizzare il contesto di ciò che è stato appena consumato.
  7. Overscroll: quest'ultima fase esamina i delta finali disponibili e consumati. Qualsiasi input disponibile rimanente che arriva a questa fase viene in genere utilizzato per generare effetti sui bordi, come un allungamento o un bagliore, che indicano che l'utente ha raggiunto il confine dell'area scorrevole.

Delta di input della trasformazione

Il delta dell'input del puntatore richiede aggiustamenti del segno nelle fasi di scorrimento per corrispondere ai contratti previsti. Prima che il delta raggiunga la fase Scroll, i modificatori di scorrimento regolano il delta di input in base all'orientamento, alla direzione del layout e ai contesti RTL. Questo accade perché l'input non elaborato monitora il movimento fisico dei pixel del puntatore sullo schermo (ad esempio, lo spostamento verso il basso aumenta la coordinata Y dello schermo, generando un delta positivo). Tuttavia, per ottenere lo "scorrimento naturale" in cui i contenuti si spostano con il dito, trascinare verso il basso significa che l'area visibile deve spostarsi verso l'alto sui contenuti, il che corrisponde a un offset di scorrimento negativo.

I delta di input provenienti da altre origini di input, come la rotellina del mouse o il touchpad, non vengono trasformati durante le fasi di scorrimento.

Esempio: il puntatore si sposta verso destra utilizzando Modifier.horizontalScroll()

Un grafico che mostra un gesto in cui il puntatore si sposta verso destra
Figura 2. Un grafico che mostra un gesto in cui il puntatore si sposta verso destra.

Per capire come vengono utilizzati e trasformati i delta, consulta la Figura 2, che mappa un gesto in cui il puntatore si sposta verso destra.

  • Pre-scorrimento:il gesto inizia con un delta di input non elaborato positivo di 100.
    • Overscroll lo osserva e consuma 10, lasciando 90.
    • Nested scroll pre-scroll offre al componente principale l'opportunità di reagire, consumando 30. Il delta non elaborato rimanente è 60.
  • Trasformazione A: prima di entrare nella fase di scorrimento, horizontalScroll inverte il delta non elaborato positivo rimanente (60) in un delta negativo (-60). In questo modo, l'area visibile si sposta a sinistra, così i contenuti sembrano spostarsi a destra con il dito dell'utente.
  • Scorrimento:il componente scorrevole di destinazione utilizza una parte di questo delta trasformato per aggiornare l'offset di scorrimento. In questo esempio, consuma -30, lasciando -30 non consumati.
  • Trasformazione B: il delta di scorrimento non utilizzato (-30) viene riconvertito in un delta non elaborato positivo (30) per corrispondere al contratto di scorrimento nidificato e overscroll.
  • Post-scorrimento:il delta non elaborato rimanente viene restituito alla pipeline.
    • Nested scroll post-scroll consuma 10, lasciando 20.
    • L'effetto di overscroll utilizza gli ultimi 20 per generare effetti visivi sui bordi, come un allungamento o un bagliore, risolvendo completamente il delta di input in 0.

Riferimento alla trasformazione delta dell'input del puntatore

La tabella seguente illustra come vengono firmati i delta di input nelle diverse fasi e direzioni per l'input del puntatore.

Delta di input non elaborato Effetto overscroll Scorrimento nidificato scrollableArea con orientamento orizzontale scrollableArea con orientamento orizzontale (invertito) scrollableArea con orientamento verticale scrollableArea con orientamento verticale (invertito)
Il puntatore si sposta VERSO L'ALTO Negativo Negativo Negativo N/D N/D Positivo Negativo
Il puntatore si sposta IN BASSO Positivo Positivo Positivo N/D N/D Negativo Positivo
Il puntatore si sposta a SINISTRA Negativo Negativo Negativo Positivo (negativo per RTL) Negativo (positivo per RTL) N/D N/D
Il puntatore si sposta a DESTRA Positivo Positivo Positivo Negativo (positivo per RTL) Positivo (negativo per RTL) N/D N/D