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.
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"
Ce sera l'aspect final du ViewPager.
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):
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 :)
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
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.
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);