Gibt es eine Möglichkeit, eine zu erstellen ViewPager
, die nicht horizontal, sondern vertikal scrollt?!
android
android-viewpager
user1709805
quelle
quelle
Antworten:
Sie können einen ViewPager.PageTransformer verwenden , um die Illusion einer Vertikalen zu erzeugen
ViewPager
. Um einen Bildlauf mit vertikalem statt horizontalem Ziehen zu erreichen, müssen Sie dieViewPager
Standardberührungsereignisse überschreiben und die Koordinaten vonMotionEvent
s vertauschen, bevor Sie sie verarbeiten, z.Natürlich können Sie diese Einstellungen nach Belieben anpassen. Sieht am Ende so aus:
quelle
Vertikaler ViewPager
Die anderen Antworten hier schienen alle einige Probleme mit ihnen zu haben. Selbst die empfohlenen Open Source-Projekte haben die letzten Pull-Anfragen nicht mit Fehlerkorrekturen zusammengeführt. Dann fand ich eine
VerticalViewPager
von Google, dass sie eine DeskClock-App verwendeten. Ich vertraue darauf, dass die Implementierung von Google viel mehr verwendet wird als die anderen Antworten, die hier herumschwirren. (Die Version von Google ähnelt der aktuellen Antwort mit den meisten Stimmen, ist jedoch gründlicher.)Vollständiges Beispiel
Dieses Beispiel entspricht fast genau meinem Basic ViewPager-Beispiel , mit einigen geringfügigen Änderungen, um die
VerticalViewPager
Klasse zu verwenden.XML
Fügen Sie die XML-Layouts für die Hauptaktivität und für jede Seite (Fragment) hinzu. Beachten Sie, dass wir
VerticalViewPager
eher als den Standard verwendenViewPager
. Ich werde den Code dafür unten einfügen.activity_main.xml
fragment_one.xml
Code
Der Code für das
VerticalViewPager
ist nicht meins. Es ist nur eine abgespeckte Version (ohne Kommentare) aus dem Google-Quellcode. Schauen Sie sich diese Version an, um die aktuellste Version zu erhalten. Die Kommentare dort sind auch hilfreich, um zu verstehen, was passiert.VerticalViewPager.java
MainActivity.java
Ich nur ausgelagert
VerticalViewPager
fürViewPager
.Fertig
Sie sollten in der Lage sein, die App auszuführen und das Ergebnis in der obigen Animation zu sehen.
Siehe auch
quelle
Ich habe eine Lösung, die in zwei Schritten für mich funktioniert.
onInstantiateItem()
vonPagerAdapter
, erstellen Sie die Ansicht , und drehen Sie es um -90:Wenn Sie verwenden
FragmentPagerAdapter
, dann:ViewPager
Ansicht um 90 Grad drehen :Funktioniert zumindest für meine Anforderungen wie ein Zauber.
quelle
Für jemanden, der Probleme damit hat, wie vertikaler ViewPager in horizontaler Richtung funktioniert, gehen Sie einfach wie folgt vor:
Vertikaler ViewPager
Horizontaler ViewPager
quelle
Eine geringfügige Erweiterung dieser Antwort half mir, meine Anforderung zu erfüllen (Vertical View Pager zum Animieren ähnlich wie in Inshorts - News in 60 Wörtern )
Ich hoffe, dass dies jemand anderem hilfreich sein könnte.
quelle
Es gibt einige Open-Source-Projekte, die dies behaupten. Hier sind sie:
Diese wurden von ihren Autoren als veraltet markiert:
Und noch etwas:
deskclock
App, der jedoch nicht offiziell unterstützt zu werden scheint, da ich keine Dokumentation dafür finden kann.quelle
Überprüfen Sie dies: https://github.com/JakeWharton/Android-DirectionalViewPager
Oder die folgende Frage kann Ihnen helfen: Vertikale "Rasteransicht mit Seiten" oder "Viewpager"
quelle
DirectionalViewPager
seit einiger Zeit nicht mehr aktualisiert wurde und daher einige der neueren Funktionen desViewPager
in der Support-Bibliothek fehlen . dhsetPageMargin(int)
. Im Allgemeinen sollte es den Job aber machen. Und wenn nicht, ist es nicht allzu schwierig, den Quellcode zu findenViewPager
und die gesamte x / y- und width / height-Logik auszutauschen.DirectionalViewPager
aber wie MH sagte, ist es nicht aktualisiert (sein Entwickler betrachtet es als DEPRECATED) !! Es ist unglaublich, dass Android-Entwickler der Community keine vertikaleViewPager
, sondern nur horizontale Community zur Verfügung gestellt haben. Ich bin neuer als Android, die Entwicklung meines vertikalenViewPager
Austauschs von x / y ist für mich nicht so einfach. Ich würde eine bereits erstellte Lösung bevorzugen.Nur eine Verbesserung der Antworten von @Brett und @ Salman666, um die Koordinaten (X, Y) korrekt in (Y, X) umzuwandeln , da die Geräteanzeigen rechteckig sind:
...
...
Es muss jedoch noch etwas getan werden, um die Reaktionsfähigkeit des Touchscreens zu verbessern. Das Problem könnte mit dem zusammenhängen, was @msdark zur Antwort von @ Salman666 kommentiert hat.
quelle
true
zurückkehre,onInterceptTouchEvent
und ich habe auch die Tastenkombinationen so geändert, dass bei Verwendung eines DPAD ein Bildlauf mit UP / DOWN anstelle von links / rechts ausgelöst wirdquelle
Es gibt tatsächlich bereits eine in der Android-Quelle . Ich habe es geändert, um besser zu funktionieren:
quelle
Ein derzeit aktiveres Repository ist lsjwzh / RecyclerViewPager .
RecyclerView
quelle
Dies ist eine vertikal scrollbare ViewPager-Implementierung. Funktioniert gut mit RecyclerView und ListView. Guochong / VerticalViewPager .
Verwenden Sie ViewPager.PageTransformer, um ViewPager vertikal zu scrollen, und stellen Sie außerdem einen View.OnTouchListener bereit, um den Bildlaufkonflikt zu behandeln.
quelle
Sogar ich hatte das gleiche Problem damit, ViewPager durch Vertauschen von X und Y vertikal zu machen. Es war überhaupt nicht glatt.
Das liegt daran, dass es früher nur funktionierte, wenn der Wischwinkel beim Abfangen weniger als 7,125 Grad = Arctan (1/8) und beim Berühren 14 Grad = Arctan (1/4) betrug. Als ursprünglicher horizontaler ViewPager funktioniert man, wenn der Wischwinkel beim Abfangen weniger als 26,565 Grad = Arctan (1/2) und beim Berühren 45 Grad = Arctan (1) beträgt.
Deshalb habe ich den Code von Android support-core-ui kopiert und die Werte in Variablen verschoben, die ich mit Reflection multipliziert habe.
Den Code und die README-Datei finden Sie unter https://github.com/deepakmishra/verticalviewpager und VerticalViewPager unter https://github.com/deepakmishra/verticalviewpager/blob/master/app/src/main/java/com/viewpager/VerticalViewPager .Java
quelle
Der bessere Weg ist, den Viewpager um 90 Grad zu drehen und die Position mithilfe des ConstraintLayout anzupassen.
quelle
Am Ende habe ich einen neuen DirectionalViewPager erstellt , der entweder vertikal oder horizontal scrollen kann, da alle Lösungen, die ich hier gesehen habe, Fehler aufweisen:
Bestehende VerticalViewPager-Implementierungen (von castorflex und LambergaR)
Transformationstrick mit Koordinatentausch
VelocityTracker.computeCurrentVelocity
die Geschwindigkeit mit der X-Achse berechnet wird, wahrscheinlich weil intern ein nativer Aufruf verwendet wird, der den Koordinatentausch ignoriert.Rotation anzeigen
quelle