J'utilise Android ViewPager
. Ce que je veux faire, c'est afficher un aperçu de la page à gauche et à droite. J'ai vu où je peux utiliser un négatif pageMargin
pour afficher un aperçu du côté droit.
setPageMargin(-100);
Est-il possible d'afficher un aperçu du côté gauche également? C'est fondamentalement quelque chose de similaire au widget de galerie que je recherche.
android
android-viewpager
Brian Boyle
la source
la source
setPageMargin(-100)
fonctionne- t-il correctement?Réponses:
Pour afficher l'aperçu des pages gauche et droite, définissez les deux valeurs suivantes
viewpager.setClipToPadding(false);
viewpager.setPadding(left,0,right,0);
Si vous avez besoin d'espace entre deux pages dans le visualiseur, ajoutez
la source
La réponse de @JijuInduchoodan est parfaite et fonctionne. Cependant, comme je suis relativement nouveau sur Android, il m'a fallu un certain temps pour le comprendre et le configurer correctement. Donc, je publie cette réponse pour référence future et aide toute autre personne qui est dans les mêmes chaussures que moi.
Il n'est pas nécessaire de définir une largeur de
ViewPager's
page dans l'adaptateur. Il n'y a pas de code supplémentaire requis pour voir la page précédente et suivante dansViewPager
. Toutefois, si vous souhaitez ajouter un espace vide en haut et en bas de chaque page, vous pouvez définir le code suivant surViewPager's
la mise en page parent de la page enfant.Ce sera le look final du ViewPager.
la source
Solution avec le nouveau ViewPager2
De nos jours, vous devriez envisager d'utiliser ViewPager2 qui "remplace ViewPager, en résolvant la plupart des problèmes de son prédécesseur" :
Le résultat
Le code
Dans votre activité / fragment, configurez le ViewPager2:
Ajoutez le
HorizontalMarginItemDecoration
, qui est trivialItemDecoration
:Ajoutez les dimensions qui contrôlent la quantité de l'élément précédent / suivant visible et la marge horizontale de l'élément actuel:
Enfin, ajoutez le
ViewPager2
à votre mise en page:Une chose importante: un
ViewPager2
élément doit avoirlayout_height="match_parent"
(sinon il lève une IllegalStateException), vous devriez donc faire quelque chose comme:Exemples de PageTransformer
Google a ajouté un guide sur ViewPager2 qui a 2
PageTransformer
implémentations que vous pouvez utiliser comme source d'inspiration: https://developer.android.com/training/animation/screen-slide-2À propos du nouveau ViewPager2
la source
viewpager.setPageTransformer { page, position -> page.translationX = -1 * position }
setOffscreenPageLimit(1)
:)En 2017, un tel comportement peut également être facilement obtenu en utilisant
RecyclerView
avec PagerSnapHelper (ajouté dans la version 25.1.0 de la bibliothèque de support v7):Il y a quelque temps, j'avais besoin d'une telle fonctionnalité de type viewpager et j'ai préparé une petite bibliothèque:
MetalRecyclerPagerView - vous pouvez trouver tout le code ainsi que des exemples.
Il se compose principalement d'un fichier de classe unique: MetalRecyclerViewPager.java (et de deux xml: attrs.xml et ids.xml ).
J'espère que cela aide quelqu'un et gagnera quelques heures :)
la source
new PagerSnapHelper().attachToRecyclerView(recyclerView)
et j'ai la capture de page.si quelqu'un cherche toujours une solution, j'avais personnalisé la ViewPage pour y parvenir sans utiliser de marge négative, trouvez un exemple de projet ici https://github.com/44kksharma/Android-ViewPager-Carousel-UI cela devrait fonctionner dans la plupart des cas mais vous peut toujours définir la marge de page avec
mPager.setPageMargin(margin in pixel);
la source
Vous pouvez le faire dans un fichier xml, utilisez simplement le code ci-dessous:
la source
Pour ceux qui ont du mal à avoir cela sur différents écrans,
la source
Notez que lorsque vous définissez des paddings sans zéro sur un viewpager, le placement edgeeffect du viewpager est foiré, c'est un bogue du viewpager, voir ici: viewpager edgeeffect bug
Vous pouvez soit désactiver l'effet de bord en définissant
android:overScrollMode="never"
sur le visualiseur, soit corriger le bogue avec une version légèrement modifiée de la classe EdgeEffect : ViewPagerEdgeEffect fixla source
Utilisez cet adaptateur de fragment et cette classe pour afficher le visionneur dans le défilement gauche et droit, ajoutez les classes nécessaires pour faire défiler les pages suivantes.
la source