Parallax-Effekt für jedes Objekt in einer Recycler-Ansicht?

8

Ich versuche, mit Parallax zu spielen und ein paar seltsame Bugs zu bekommen. Ich frage mich, ob irgendjemand etwas Input hinzufügen kann. Die einzige App, die Parallax effektiv implementiert, ist Soundcloud. Es ist ziemlich subtil, aber jedes Element hat einen Bildhintergrund und es hat den Parallax-Effekt beim Scrollen.

Ich habe ein benutzerdefiniertes RecyclerView erstellt, um damit umzugehen, hier ist, was ich bisher habe:

%Vor%

In meinem RecyclerView Adapter onBindView habe ich auch folgendes:

%Vor%

Schließlich habe ich in der Methode onViewRecycled folgendes:

%Vor%

Ich habe mit diesem Code auf Github gearbeitet, um die Idee zu bekommen

So funktioniert die Parallaxe, aber die Ansichten in meinem RecyclerView bewegen sich auch. Ich habe ein CardView unter dem Bild und es bewegt sich, wodurch große Lücken zwischen den einzelnen Elementen entstehen. Scrollen ist das, was dies verursacht, je mehr die Bildlaufbewegung nach oben und nach unten erfolgt, je größer die Lücken werden, und die Bilder werden kleiner, wenn die Parallaxe sie aus ihren Grenzen bewegt.

Ich habe versucht, mit den Zahlen wie scrollSpeed ​​in OnScrollListener zu spielen, aber während es den Fehler reduziert, reduziert es auch die Parallaxe.

Hat jemand irgendwelche Ideen, wie ich einen fehlerfreien Parallax-Effekt für jeden Gegenstand in meinem RecyclerView erreichen kann? Ich habe das Gefühl, dass ich damit etwas anfangen kann, aber es ist immer noch sehr buggy und ich weiß nicht, was der nächste Schritt ist.

Ps. Ich habe versucht, 3rd-Party-Bibliotheken zu suchen, aber sie alle scheinen nur Header-Parallaxe wie die CoordinatorLayout zu verwenden, ich habe keine gefunden, die es nur auf jedem Element in einer Liste tun.

Ich hoffe, dass diese Frage eine gute Diskussion bekommt, auch wenn ich mein Problem nicht lösen kann, weil Parallax in Android anscheinend zu wenig genutzt wird und es wenig darüber gibt.

Vielen Dank für Ihre Zeit, schätze jede Hilfe.

    
RED_ 18.04.2016, 09:29
quelle

2 Antworten

4

Ich habe Parallax mit dieser Bibliothek arbeiten lassen: Ссылка

Für jeden, der das selbst macht, ist es immer noch eine gute Sache zu spielen und zu sehen, wie es funktioniert.

Ähnliches Konzept zu meinem Code, aber es funktioniert tatsächlich! haha.

    
RED_ 22.04.2016, 09:21
quelle
1

Sie sind auf dem richtigen Weg. Sie müssen einen ScrollListener verwenden. Außerdem müssen Sie auf RecyclerViews LayoutManager zugreifen und über alle sichtbaren Elemente iterieren und translateY entsprechend der Anzahl der gescrollten Pixel einstellen.

Die Dinge werden ein wenig komplizierter, weil Sie recyclerView.getChildAt(pos) nicht verwenden können, da der LayoutManager für Layoutelemente zuständig ist und sie im LayoutManager möglicherweise anders angeordnet sind als getChildAt(pos) .

Also sollte der Algorithmus grundsätzlich so aussehen (Pseudocode, vorausgesetzt LinearLayoutManager wird verwendet):

%Vor%     
sockeqwe 20.04.2016 17:01
quelle