OnPageChangeListener Alpha-Überblendung

8

Es gibt viele Fragen zum Überblenden in Android, aber alle enthalten Animationen. Meine Frage bezieht sich auf das Überblenden mit dem OnPageChangeListener eines ViewPagers.

Ich habe einen ViewPager, der eine unbegrenzte Anzahl von Ansichten haben kann, aber in der Praxis ungefähr 6 oder 7 Ansichten verwendet. Da ist nicht viel los.

Jede Ansicht im ViewPager hat eine Hintergrund-Bitmap, die fixiert und mit dem Hintergrund der nächsten (oder vorherigen) Ansicht überblendet werden sollte, anstatt mit dem Rest der Ansicht zu scrollen.

Um dies zu erreichen, entkoppelte ich die Hintergründe und fügte sie zu einer ArrayList hinzu und ordnete sie später ImageViews zu. Aber da ich nicht riskieren möchte, dass meine Aktivität mit zahlreichen ImageViews endet, dachte ich über die folgende Struktur nach:

%Vor%

Dann wird dem ViewPager ein OnPageChangeListener zugewiesen, um die Hintergründe den ImageViews zuzuweisen.

%Vor%

Das funktioniert gut, wenn ich nur die Hintergründe tauschen möchte. Ich möchte, dass die Hintergründe überblenden, während der Benutzer den ViewPager wischt. Ich habe das Fade für eine Vorwärts-Scroll-Funktion, aber ich verstehe nicht, warum das Fade für die Rückwärts-Scroll irgendwie kein gutes Ergebnis liefert. Während eines Rückwärtslaufs sollte der mittlere Hintergrund in den unteren Hintergrund übergehen.

Ich fürchte, ich vermisse etwas. Ich ändere nie das Alpha des unteren Hintergrunds, aber die Log-Ergebnisse zeigen immer den exakt gleichen Wert für getAlpha() wie für den mittleren Hintergrund.

%Vor%

Und warte! Es gibt noch eine Sache, bei der ich wirklich nicht in der Lage bin, herauszufinden, wie ich es beheben kann. Obwohl die Vorwärts-Scroll-Funktion funktioniert. Es gibt ein super kurzes Flackern im Hintergrund. Ich nehme an, dass dies geschieht, weil ich die Methode onPageSelected eingerichtet habe.

Gibt es eine andere Möglichkeit, wie ich dieses Verhalten erstellen / beheben kann?

    
StingRay5 02.05.2014, 16:39
quelle

1 Antwort

25

ViewPager.PageTransformer ist dein Freund. Ich werde einen anderen Ansatz wählen als das, was Sie ausprobiert haben, aber es führt zu dem, was ich verstehe, um das gewünschte Ergebnis zu erzielen. Wenn Sie nach links / rechts wischen, wird der Inhalt überblendet, aber zwischen zwei Hintergrundbildern, die sich nicht bewegen, ausgeblendet >

Jedes Fragment in ViewPager hat ein ähnliches Layout:

%Vor%

Und Sie werden eine PageTransformer erstellen, die das Layout abhängig von der Position manipuliert, an der es kopiert wurde:

%Vor%

Und schließlich hook diese PageTransformer bis zu Ihrem ViewPager :

%Vor%

Ich habe es in einer bestehenden App getestet und es funktioniert gut, solange die Fragment-Layouts einen transparenten Hintergrund haben.

    
myanimal 07.05.2014, 19:28
quelle

Tags und Links