9

Ich möchte Vorhersageanimationen in my custom LayoutManager unterstützen, wenn Element von außerhalb der sichtbaren Bildschirmgrenzen zum sichtbaren Punkt verschoben wird.Anzuzeigende Ansicht in LayoutManager-Vorlayout bestimmen

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

Nach einer Dokumentation prädiktiven Animationen in Pre-Layout-Phase zu unterstützen (state.isPreLayout()) i für die Änderung Animation die Anfangsbedingungen einrichten sollte (zB Ort erscheinen Ansichten irgendwo)

Das Problem ist, dass ich nicht finde einen Weg, um im Vorlayout zu bestimmen, welche Ansichten von außen bewegt werden, weil ich nur mit aktuell an RecyclerView angebrachten Ansichten arbeiten kann und die onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount) Methode nach Vorlayoutstufe heißt. (Zum Beispiel ist onItemsRemoved vor Pre-Layout genannt)

Ist es der Fehler mit LayoutManager oder könnte ich irgendwie bestimmt in Pre-Layout-Ansichten, die bald gehen zu bewegt?

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

//childViews is an iterable over RecyclerView items 
for (View view : childViews) { 
    RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams(); 

    boolean probablyMovedFromScreen = false; 

    if (!lp.isItemRemoved()) { 
     //view won't be removed, but maybe it is moved offscreen 
     int pos = lp.getViewLayoutPosition(); 

     //start view is a first visible view on screen 
     int lowestPosition = getPosition(startView); 
     int highestPosition = getPosition(endView); 

     pos = recycler.convertPreLayoutPositionToPostLayout(pos); 
     probablyMovedFromScreen = pos < lowestPosition || pos > highestPosition; 
    } 

    if (probablyMovedFromScreen) { 
     //okay this view is going to be moved 
    } 

} 

This article haben mir sehr geholfen, aber es beschreibt auch keine Animation, die ich brauche.

PPS: LinearLayoutManager unterstützt solche Animationen auch nicht. (Es gibt nur eine einfache Einblendanimation)

+0

sucht immer noch nach Lösung ... – Beloo

+0

Gute Frage. Ich stecke auch hier fest. Bitte teilen Sie, wenn Sie eine Lösung finden. –

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 Speicherplatz benötigt wird welche Richtung. 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.

http://www.birbit.com/recyclerview-animations-part-1-how-animations-work http://www.birbit.com/recyclerview-animations-part-2-behind-the-scenes

+0

Aber was ist mit Bewegung, die Frage ist darum. Zum Beispiel werden Ansichten von 100 bis 120 auf dem Bildschirm angezeigt und die Ansicht von 0 wird auf 110 verschoben. Um Predictive Animation zu spielen, sollte ich 0 view irgendwo platzieren, aber ich weiß nicht wirklich, dass es genau 0 Ansicht ist, weil 'onItemsMoved' noch kein Pre-Layout aufgerufen hat. Ohne diese wird eine solche Ansicht mit einer einfachen Einblendanimation angezeigt und 'LinearLayoutManager' löst dieses Problem auch nicht, wie ich sehe – Beloo

+0

Ich habe Ihnen ein Kopfgeld verliehen, um es nicht zu verbrennen, aber die Antwort ist immer noch geöffnet. Was auch immer, ty für den Versuch – Beloo