Ich benutze Android ViewPager
. Ich möchte links und rechts eine Vorschau der Seite anzeigen. Ich habe gesehen, wo ich ein Negativ verwenden kann pageMargin
, um eine Vorschau der rechten Seite anzuzeigen.
setPageMargin(-100);
Kann ich trotzdem eine Vorschau der linken Seite anzeigen? Es ist im Grunde etwas Ähnliches wie das Galerie-Widget, das ich suche.
android
android-viewpager
Brian Boyle
quelle
quelle
setPageMargin(-100)
richtig?Antworten:
Um die Vorschau der linken und rechten Seite anzuzeigen, stellen Sie die folgenden zwei Werte ein
viewpager.setClipToPadding(false);
viewpager.setPadding(left,0,right,0);
Wenn Sie zwischen zwei Seiten im Viewpager Platz benötigen, fügen Sie hinzu
quelle
Die Antwort von @JijuInduchoodan ist perfekt und funktioniert. Da ich jedoch relativ neu in Android bin, habe ich eine Weile gebraucht, um es richtig zu verstehen und einzustellen. Also poste ich diese Antwort als zukünftige Referenz und helfe allen anderen, die in den gleichen Schuhen wie ich sind.
Es ist nicht erforderlich, die Breite der
ViewPager's
Seite im Adapter festzulegen. Es ist kein zusätzlicher Code erforderlich, um die vorherige und nächste Seite in anzuzeigenViewPager
. Wenn Sie jedoch oben und unten auf jeder Seite Leerzeichen hinzufügen möchten, können Sie den folgenden Code fürViewPager's
das übergeordnete Layout der untergeordneten Seite festlegen.Dies ist das endgültige Erscheinungsbild des ViewPager.
quelle
Lösung mit dem neuen ViewPager2
Heutzutage sollten Sie in Betracht ziehen, ViewPager2 zu verwenden, das "ViewPager ersetzt und die meisten Schwachstellen seines Vorgängers behebt" :
Das Ergebnis
Der Code
Richten Sie in Ihrer Aktivität / Ihrem Fragment den ViewPager2 ein:
Fügen Sie das hinzu
HorizontalMarginItemDecoration
, was trivial istItemDecoration
:Fügen Sie die Abmessungen hinzu, die steuern, wie viel vom vorherigen / nächsten Element sichtbar ist, und den horizontalen Rand des aktuellen Elements:
Fügen Sie schließlich das
ViewPager2
zu Ihrem Layout hinzu:Eine wichtige Sache: Ein
ViewPager2
Element muss habenlayout_height="match_parent"
(andernfalls wird eine IllegalStateException ausgelöst), daher sollten Sie Folgendes tun:PageTransformer-Beispiele
Google hat in ViewPager2 eine Anleitung hinzugefügt, die zwei
PageTransformer
Implementierungen enthält, die Sie als Inspiration verwenden können: https://developer.android.com/training/animation/screen-slide-2Über den neuen ViewPager2
quelle
viewpager.setPageTransformer { page, position -> page.translationX = -1 * position }
setOffscreenPageLimit(1)
Im Jahr 2017 kann ein solches Verhalten zusätzlich leicht
RecyclerView
mit PagerSnapHelper (hinzugefügt in Version 25.1.0 der v7-Unterstützungsbibliothek) erreicht werden: Vor einiger Zeit brauchte ich eine solche Viewpager-ähnliche Funktion und bereitete eine winzige Bibliothek vor:
MetalRecyclerPagerView - dort finden Sie den gesamten Code sowie Beispiele.
Hauptsächlich besteht es aus einer einzelnen Klassendatei: MetalRecyclerViewPager.java (und zwei xmls: attrs.xml und ids.xml ).
Hoffe es hilft jemandem und spart einige Stunden :)
quelle
new PagerSnapHelper().attachToRecyclerView(recyclerView)
und ich habe Seitenschnappschuss.Wenn jemand noch nach einer Lösung sucht, habe ich die ViewPage so angepasst, dass sie ohne negative Marge erreicht wird. Ein Beispielprojekt finden Sie hier https://github.com/44kksharma/Android-ViewPager-Carousel-UI. Es sollte in den meisten Fällen funktionieren, aber Sie kann noch Seitenrand mit definieren
mPager.setPageMargin(margin in pixel);
quelle
Sie können dies in einer XML-Datei tun. Verwenden Sie einfach den folgenden Code:
quelle
Für diejenigen, die Schwierigkeiten haben, dies auf verschiedenen Bildschirmen zu haben,
quelle
Beachten Sie, dass beim Festlegen von Nicht-Null-Auffüllungen für einen Viewpager die Edgeeffect-Platzierung des Viewpagers durcheinander gebracht wird. Dies ist ein Fehler des Viewpagers. Siehe hier: Viewpager-Edgeeffect-Fehler
Sie können den Kanteneffekt entweder deaktivieren, indem Sie
android:overScrollMode="never"
den Viewpager festlegen, oder Sie können den Fehler mit einer leicht geänderten Version der EdgeEffect-Klasse beheben : ViewPagerEdgeEffect-Fixquelle
Verwenden Sie diesen Fragmentadapter und diese Klasse, um den Viewpager im linken und rechten Bildlauf anzuzeigen. Fügen Sie die erforderlichen Klassen hinzu, um einen Bildlauf zum Anzeigen der nächsten Seiten durchzuführen.
quelle