55 votes

Plusieurs pages en même temps sur un ViewPager

Est-il possible d'afficher deux pages en même temps, en utilisant un ViewPager ? Je ne recherche pas un effet de bord, mais plutôt deux pages entières en même temps.

69voto

Markus Wörz Points 306

Veuillez consulter la getPageWidth dans le PagerAdapter . Remplacez-le et retournez par exemple 0.8f pour que toutes les pages enfants ne couvrent que 80% de la largeur du ViewPager.

Plus d'informations: http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)

13voto

flagg327 Points 18

Vous devez remplacer la getPageWidth() sur l'adaptateur du viewpager. Par exemple:

 @Override
public float getPageWidth(int position) {
    return 0.9f;
}

Essayez ce code dans votre adaptateur et vous comprendrez.

5voto

kaw Points 51

Voir cette entrée de blog . La technique PagerContainer est résolue mon problème.

ÉDITER: J'ai trouvé la même réponse. Comment migrer de Gallery vers HorizontalScrollView & ViewPager ?

3voto

Hans Points 221

créez votre fichier de mise en page : my_layout.xml :

 <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<FrameLayout
    android:id="@+id/pager_container"
    android:layout_width="match_parent"
    android:layout_height="240dp"
    android:clipChildren="false">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="200dp"
        android:clipToPadding="false"
        android:layout_height="200dp"
        android:layout_marginLeft="70dp"
        android:layout_marginRight="70dp"
        android:layout_gravity="center" />
</FrameLayout>
</layout>

le viewpager est à peu près aussi petit que vous voulez que vos pages soient. Avec android:clipToPadding="false", les pages en dehors du pager sont également visibles. Mais maintenant, faire glisser en dehors du pager n'a aucun effet. Cela peut être résolu en sélectionnant des touches dans le conteneur du pager et en les transmettant au pager :

 MyLayoutBinding binding = DataBindingUtil.<MyLayoutBinding>inflate(layoutInflater, R.layout.my_layout, parent, false)
binding.pager.setOffscreenPageLimit(3);
binding.pager.setPageMargin(15);
binding.pagerContainer.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
           return chatCollectionLayoutBinding.pager.onTouchEvent(event);
      }
 });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X