Bestimmen Sie die erscheinende Ansicht im Layout-Layout des LayoutManagers

9

Ich möchte vorausschauende Animationen in meinem benutzerdefinierten LayoutManager unterstützen, wenn das Element von außerhalb der sichtbaren Bildschirmgrenzen zum sichtbaren Punkt verschoben wird.

Alle Füllvorgänge mache ich in onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) .

Laut einer Dokumentation zur Unterstützung prädiktiver Animationen in der Pre-Layout-Phase ( state.isPreLayout() ) sollte ich die Anfangsbedingungen für die Change-Animation festlegen (z. B. irgendwo erscheinende Views)

Das Problem ist, dass ich keinen Weg finden kann, um im Vorlayout zu bestimmen, welche Ansichten von außerhalb verschoben werden, weil ich nur mit aktuell an RecyclerView-Ansichten angehängten Ansichten arbeiten kann und onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount) method ist genannt nach Pre-Layout-Phase. (Zum Beispiel heißt onItemsRemoved vor Vorlayout)

Ist es der Fehler mit LayoutManager oder könnte ich irgendwie Bestimmen Sie im Vorlayout, welche Ansichten bald verschoben werden sollen.

PS: Ich kann die Vorhersageanimation vom sichtbaren Punkt nach draußen beibehalten, weil ich in der Lage bin, sichtbare Ansichten zu durchlaufen und mit recycler.convertPreLayoutPositionToPostLayout zu bestimmen, welche verschoben werden sollen.

%Vor%

Dieser Artikel hat mir sehr geholfen, beschreibt aber auch keine Animation Ich brauche.

PPS: LinearLayoutManager unterstützt solche Animationen auch nicht. (Es gibt nur einfache Fade-in-Animation)

    
Beloo 09.11.2016, 15:35
quelle

1 Antwort

3

Sie wissen nicht, welche Elemente sichtbar sein werden, aber Sie wissen, welche Elemente weggehen (oder geändert werden). Daher können Sie abschätzen, wie viel Platz in welcher Richtung benötigt wird. Sie können den Code des LinearLayoutManagers überprüfen, um zu sehen, wie es funktioniert. Sie können diese Artikel auch über die Details des RecyclerView-Systems lesen.

Ссылка Ссылка

    
yigit 22.11.2016 00:52
quelle