2015-04-18 1 views
2

J'ai essayé de comprendre cela par moi-même, mais aucune chance.Recyclerview comme Snappy Gallery

Ce dont j'ai besoin est le RecyclerView (défilement horizontal) pour toujours montrer 3 articles. Et chaque fois que l'utilisateur lance ou fait défiler vers la gauche ou la droite, il doit aligner les trois éléments suivants, s'il y en a d'autres. Je cherche juste la solution la plus simple s'il y en a.

J'ai trouvé des solutions de galerie avec un seul article, mais j'ai besoin de 3 articles. Je sais que ce doit être possible mais je ne pouvais pas vraiment comprendre comment. Pour un, le LayoutManager devrait calculer la largeur de l'objet pour le faire correspondre à la largeur de l'appareil. Et je suppose que je dois utiliser un RecyclerView.OnScrollListener en quelque sorte.

Quelqu'un peut-il m'aider?

Répondre

1

J'ai eu un cas d'utilisation similaire et j'ai obtenu de bons résultats en utilisant les suggestions dans ce SO fil:

Snappy scrolling in RecyclerView

Le résultat est le suivant: utiliser un RecyclerView.OnScrollListener personnalisé pour détecter le moment où les changements d'état de défilement SCROLL_STATE_IDLE, à quel point utilisez une sous-classe de LayoutManager qui implémente getFixScrollPos() pour calculer, puis faites défiler jusqu'à la position correcte, accrochant le processus.

J'ai également été en mesure d'utiliser un attribut styleable pour définir le nombre d'éléments dans la ligne au moment du design. Vous voudrez peut-être faire cela aussi.

0

Ai-je raison de supposer que chaque page de la galerie est une liste verticale de 3 éléments?

Appelez getWidth() et getHeight() dans votre priorité de LayoutManager.onMeasure(Recycler, int, int, int) pour obtenir la taille réelle du recycleur. Vous pouvez ensuite l'utiliser dans onLayoutChildren() pour déterminer la taille des enfants. En ce qui concerne le défilement des vues suivantes, je ne suis pas tout à fait sûr. Peut-être ajouter un OnScrollListener personnalisé à RecyclerView comme dans RecyclerView horizontal snap in center?

6

Avec LinearSnapHelper, c'est maintenant très facile.

Tout ce que vous devez faire est la suivante:

SnapHelper helper = LinearSnapHelper(); 
helper.attachToRecyclerView(recyclerView); 

Il est aussi simple que cela! Notez que LinearSnapHelper a été ajouté dans la bibliothèque de support à partir de la version 24.2.0.