web-dev-qa-db-fra.com

Android ViewPager - Afficher l'aperçu de la page à gauche et à droite

J'utilise la variable ViewPager d'Android. Ce que je veux faire, c'est montrer un aperçu de la page à gauche et à droite. J'ai vu où je peux utiliser une pageMargin négative pour afficher un aperçu du côté droit.

setPageMargin(-100);

Est-ce que je peux quand même afficher un aperçu du côté gauche? C'est fondamentalement quelque chose de similaire au widget de galerie que je cherche.

83
Brian Boyle

La réponse de @JijuInduchoodan est parfaite et fonctionne bien. Cependant, comme je suis relativement nouveau sur Android, il m'a fallu un certain temps pour le comprendre et le configurer correctement. Donc, je poste cette réponse pour référence future et aider tous ceux qui sont dans la même situation que moi.

if (viewPager == null) 
        {

            // Initializing view pager
            viewPager = (ViewPager) findViewById(R.id.vpLookBook);

            // Disable clip to padding
            viewPager.setClipToPadding(false);
            // set padding manually, the more you set the padding the more you see of prev & next page
            viewPager.setPadding(40, 0, 40, 0);
            // sets a margin b/w individual pages to ensure that there is a gap b/w them
            viewPager.setPageMargin(20);
        }

Il n'est pas nécessaire de définir la largeur de la page ViewPager's dans l'adaptateur. Il n'y a pas de code supplémentaire requis pour voir la page précédente et suivante dans ViewPager. Toutefois, si vous souhaitez ajouter un espace vide en haut et en bas de chaque page, vous pouvez définir le code suivant sur la disposition parent de ViewPager's page enfant.

Android:paddingTop="20dp"
Android:paddingBottom="20dp"

 Final ViewPager

Ce sera l'aspect final du ViewPager.

57
Rohan Kandwal

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 de la v7):

 enter image description here

Il y a quelque temps, j'avais besoin d'une telle fonctionnalité semblable à celle d'un viewpager et j'avais préparé une petite bibliothèque: 

MetalRecyclerPagerView - vous pouvez y trouver tout le code ainsi que des exemples.

Il consiste principalement en un seul fichier de classe: MetalRecyclerViewPager.Java (et deux xmls: attrs.xml et ids.xml ).

J'espère que cela aidera quelqu'un et vous fera économiser quelques heures :)

23
Alexander Bilchuk

Notez que lorsque vous définissez aucun padding nul dans un viewpager, le placement de l'effet de l'effet de l'effet est modifié, il s'agit d'un bogue de l'outil de visualisation, voir ici: bug de l'effet de l'effet de vue

Vous pouvez soit désactiver l'effet Edge en définissant Android:overScrollMode="never" sur le viewpager, soit corriger le bogue avec une version légèrement modifiée de la classe EdgeEffect: correctif ViewPagerEdgeEffect

0
ssynhtn

Vous pouvez le faire dans un fichier xml, utilisez simplement le code ci-dessous:

 Android:clipToPadding="false"
 Android:paddingLeft="XX"
 Android:paddingRight="XX"

Par exemple:

<androidx.viewpager.widget.ViewPager
        Android:id="@+id/viewpager"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:clipToPadding="false"
        Android:paddingLeft="30dp"
        Android:paddingRight="30dp" />

Remarque: Si vous avez besoin d'espace entre les pages, définissez padding/margin sur fragments enfants.

0
sma6871

Pour ceux qui luttent pour avoir cela sur différents écrans,

mPager.setClipToPadding(false);
DisplayMetrics displayMetrics = new DisplayMetrics();
self.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int paddingToSet = width/4; //set this ratio according to how much of the next and previos screen you want to show.
mPager.setPadding(paddingToSet,0,paddingToSet,0);

0
Saurabh Verma