Le défilement est divisé en plusieurs phases. Le delta d'entrée est distribué via une séquence de phases pour s'assurer que chaque phase a la possibilité d'utiliser le mouvement ou d'y réagir.
Tout au long de ce cycle, le delta d'entrée disponible et le delta d'entrée consommé sont transmis à chaque étape. Chaque phase dispose ainsi du contexte complet nécessaire pour réagir à l'événement de défilement, le consommer ou l'écouter.
Comme illustré dans la figure 1, le processus de défilement suit cet ordre exact :
- Overscroll : reçoit d'abord le delta d'entrée initial, ce qui permet au défilement excessif de réagir en premier (par exemple, en relâchant un effet d'étirement actif).
- Pré-défilement du défilement imbriqué : permet de réagir au delta d'entrée avant la phase de défilement. Au cours de cette phase, un delta d'entrée peut être consommé, ou simplement surveillé pour déclencher des modifications de l'UI, comme la réduction ou le développement d'une barre d'application.
- Transform input delta : ajuste le signe du delta d'entrée brut en fonction de l'orientation et de la direction de la mise en page pour garantir un comportement de défilement naturel. Pour en savoir plus, consultez la section Delta d'entrée de transformation.
- Défilement : cette phase reçoit le delta d'entrée disponible et non consommé, ajusté pour correspondre à la configuration du conteneur de défilement. Il utilise généralement ce delta pour mettre à jour son propre décalage de défilement.
- Revenir au delta d'entrée brut : rétablit le delta disponible et consommé de la phase Scroll au signe du delta d'entrée brut d'origine.
- Post-défilement imbriqué : cette phase réagit une fois la phase de défilement principale terminée, en recevant les deltas disponibles et consommés récemment mis à jour. Il peut consommer toute entrée disponible restante ou utiliser le contexte de ce qui vient d'être consommé.
- Overscroll : cette dernière phase examine les deltas finaux disponibles et consommés. Toute entrée disponible restante qui atteint cette étape est généralement utilisée pour générer des effets de bord, comme un étirement ou une lueur, indiquant que l'utilisateur a atteint la limite de la zone de défilement.
Delta d'entrée de transformation
Le delta d'entrée du pointeur nécessite des ajustements de signe entre les phases de défilement pour correspondre aux contrats attendus. Avant que le delta n'atteigne la phase Scroll, les modificateurs de défilement ajustent le delta d'entrée en fonction de l'orientation, de la direction de la mise en page et des contextes de droite à gauche. Cela est dû au fait que l'entrée brute suit le mouvement physique des pixels du pointeur sur l'écran (par exemple, un déplacement vers le bas augmente la coordonnée Y de l'écran, ce qui donne un delta positif). Toutefois, pour obtenir un "défilement naturel" où le contenu se déplace avec votre doigt, faire glisser vers le bas signifie que la fenêtre d'affichage doit se déplacer vers le haut sur le contenu, ce qui correspond à un décalage de défilement négatif.
Les deltas d'entrée provenant d'autres sources d'entrée, comme une molette de souris ou un pavé tactile, ne sont pas transformés pendant les phases de défilement.
Exemple : Le pointeur se déplace vers la droite à l'aide de Modifier.horizontalScroll()
Pour comprendre comment les deltas sont consommés et transformés, reportez-vous à la figure 2, qui illustre un geste où le pointeur se déplace vers la droite.
- Pré-défilement : le geste commence par un delta d'entrée brut positif de 100.
- L'overscroll observe cela et consomme 10, ce qui laisse 90.
- Le pré-défilement du défilement imbriqué permet au composant parent de réagir, en consommant 30. Le delta brut restant est de 60.
- Transformation A : avant d'entrer dans la phase Scroll,
horizontalScrollinverse le delta brut positif restant (60) en un delta négatif (-60). Cela permet de s'assurer que la fenêtre d'affichage se déplace vers la gauche, de sorte que le contenu semble se déplacer vers la droite avec le doigt de l'utilisateur. - Défilement : le composant déroulant cible consomme une partie de ce delta transformé pour mettre à jour son décalage de défilement. Dans cet exemple, il consomme -30, laissant -30 non consommé.
- Transformation B : le delta de défilement non consommé (-30) est reconverti en delta brut positif (30) pour correspondre au contrat de défilement imbriqué et de défilement au-delà de la limite.
- Post-défilement : le delta brut restant est renvoyé dans le pipeline.
- Le post-défilement du défilement imbriqué consomme 10, ce qui laisse 20.
- L'effet de défilement excessif utilise les 20 derniers pour générer des effets visuels de bordure, tels qu'un étirement ou une lueur, en résolvant entièrement le delta d'entrée sur 0.
Documentation de référence sur la transformation delta des entrées de pointeur
Le tableau suivant indique comment les deltas d'entrée sont signés selon les différentes phases et directions de l'entrée du pointeur.
| Delta d'entrée brut | Effet de défilement hors limites | Défilement imbriqué | scrollableArea avec orientation horizontale |
scrollableArea avec orientation horizontale (inversée) |
scrollableArea avec orientation verticale |
scrollableArea avec orientation verticale (inversée) |
|
|---|---|---|---|---|---|---|---|
| Le pointeur se déplace vers le HAUT. | Négatif | Négatif | Négatif | N/A | N/A | Positif | Négatif |
| Le pointeur se déplace vers le BAS | Positif | Positif | Positif | N/A | N/A | Négatif | Positif |
| Le pointeur se déplace vers la GAUCHE. | Négatif | Négatif | Négatif | Positif (négatif pour RTL) | Négatif (positif pour RTL) | N/A | N/A |
| Le pointeur se déplace vers la DROITE | Positif | Positif | Positif | Négatif (positif pour RTL) | Positif (négatif pour RTL) | N/A | N/A |