Wie kann ich die RecyclerView-Elemente animieren, wenn sie angezeigt werden?
Der Standardelementanimator wird nur animiert, wenn Daten hinzugefügt oder entfernt werden, nachdem die Recyclerdaten festgelegt wurden. Ich bin neu in der Entwicklung von Anwendungen und habe keine Ahnung, wo ich anfangen soll.
Irgendwelche Ideen, wie dies erreicht werden kann?
android
android-layout
android-recyclerview
PaulNunezM
quelle
quelle
recyclerView.scheduleLayoutAnimation()
nach Änderung des Datensatzes aufrufen. Andernfalls funktioniert die Animation nicht.EDIT:
Gemäß der ItemAnimator-Dokumentation :
Wenn Sie also Ihre Elemente nicht einzeln zu Ihrer hinzufügen
RecyclerView
und die Ansicht bei jeder Iteration aktualisieren, ist dies meiner Meinung nach nichtItemAnimator
die Lösung für Ihre Anforderungen.So können Sie die
RecyclerView
Elemente animieren , wenn sie mithilfe eines benutzerdefinierten Adapters angezeigt werden:Und Ihr custom_item_layout würde folgendermaßen aussehen:
Weitere Informationen zu CustomAdapters und
RecyclerView
finden Sie in dieser Schulung in der offiziellen Dokumentation .Probleme beim schnellen Scrollen
Die Verwendung dieser Methode kann zu Problemen beim schnellen Scrollen führen. Die Ansicht kann wiederverwendet werden, während die Animation ausgeführt wird. Um dies zu vermeiden, ist es empfehlenswert, die Animation zu löschen, wenn sie getrennt ist.
Auf CustomViewHolder:
Alte Antwort:
Schauen Sie sich Gabriele Mariottis Repo an , ich bin mir ziemlich sicher, dass Sie finden werden, was Sie brauchen. Er stellt einfache ItemAnimators für die RecyclerView bereit, z. B. SlideInItemAnimator oder SlideScaleItemAnimator.
quelle
onViewDetachedFromWindow
undclearAnimation
die Ansicht aufrufen . Das Problem ist, dass Animationen ausgeführt werden, wenn RecyclerView versucht, die Ansicht wiederzuverwenden.Ich habe das Einblenden von
Recyclerview
Elementen animiert , wenn sie zum ersten Mal angezeigt werden, wie im folgenden Code gezeigt. Vielleicht ist dies für jemanden von Nutzen.Sie können auch
setFadeAnimation()
Folgendes ersetzensetScaleAnimation()
, um das Erscheinungsbild von Elementen zu animieren, indem Sie sie von einem Punkt aus skalieren:Der obige Code enthält einige Warzen, sofern beim Scrollen die
RecyclerView
Elemente immer ausgeblendet oder skaliert werden. Wenn Sie möchten, können Sie Code hinzufügen, damit die Animation nur ausgeführt wird, wenn das Fragment oder die Aktivität, die das enthält, zumRecyclerView
ersten Mal erstellt wird (z. B. die Systemzeit bei der Erstellung abrufen und die Animation nur für die ersten Millisekunden FADE_DURATION zulassen).quelle
Ich habe eine Animation aus der Antwort von pbm mit wenig erstellt
modification
, damit die Aninmation nur einmal ausgeführt wirdmit anderen Worten die
Animation appear with you scroll down only
und
onBindViewHolder
rufen Sie die Funktion aufquelle
lastPosition
stellt die Anzahl der gerenderten Ansichten dar, so dass es der Anfang seines Wertes-1
ist. Jedes Mal, wenn eine neue Ansicht gerendert wird, starten wir eine Animation und erhöhen die PositionSie können ein
android:layoutAnimation="@anim/rv_item_animation"
Attribut hinzufügen, um Folgendes zuRecyclerView
mögen:Vielen Dank für den ausgezeichneten Artikel hier: https://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-1-list-75a874a5d213
quelle
Ein guter Anfang ist folgender: https://github.com/wasabeef/recyclerview-animators/blob/master/animators/src/main/java/jp/wasabeef/recyclerview/adapters/AnimationAdapter.java
Sie brauchen nicht einmal die vollständige Bibliothek, diese Klasse ist genug. Wenn Sie dann nur Ihre Adapterklasse implementieren und einen Animator wie diesen angeben:
Beim Scrollen werden Elemente von unten angezeigt, wodurch das Problem mit dem schnellen Scrollen vermieden wird.
quelle
Das Animieren von Elementen in der Recyclingansicht, wenn sie im Adapter gebunden sind, ist möglicherweise nicht die beste Idee, da dies dazu führen kann, dass die Elemente in der Recyclingansicht mit unterschiedlicher Geschwindigkeit animiert werden. In meinem Fall wird der Artikel am Ende der Recycling-Ansicht schneller zu seiner Position animiert als die oben, da sich die oben befindlichen weiter bewegen müssen, sodass er unordentlich aussieht.
Den Originalcode, mit dem ich jeden Artikel in der Recyclingansicht animiert habe, finden Sie hier:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Aber ich werde den Code kopieren und einfügen, falls der Link unterbrochen wird.
SCHRITT 1: Stellen Sie dies in Ihrer onCreate-Methode so ein, dass Sie sicherstellen, dass die Animation nur einmal ausgeführt wird:
SCHRITT 2: Sie müssen diesen Code in die Methode einfügen, mit der Sie die Animation starten möchten:
In dem Link animiert der Autor die Symbolleistensymbole, also fügt er sie in diese Methode ein:
SCHRITT 3: Schreiben Sie nun die Logik für startIntroAnimation ():
Meine bevorzugte Alternative:
Ich würde lieber die gesamte Recyclingansicht animieren als die Elemente in der Recyclingansicht.
SCHRITT 1 und 2 bleiben gleich.
In SCHRITT 3 würde ich die Animation starten, sobald Ihr API-Aufruf mit Ihren Daten zurückkehrt.
Dies würde Ihre gesamte Recycling-Ansicht so animieren, dass sie vom unteren Bildschirmrand einfliegt.
quelle
latestPostRecyclerview
?Erstellen Sie diese Methode in Ihrem recyclerview Adapter
Und schließlich fügen Sie diese Codezeile in onBindViewHolder hinzu
setZoomInAnimation(holder.itemView);
quelle
Im Jahr 2019 würde ich vorschlagen, alle Elementanimationen in den ItemAnimator einzufügen.
Beginnen wir mit der Deklaration des Animators in der Recycler-Ansicht:
Deklarieren Sie dann den benutzerdefinierten Animator.
Ähnlich wie oben gibt es eine für das Verschwinden
animateDisappearance
, für das HinzufügenanimateAdd
, für das ÄndernanimateChange
und BewegenanimateMove
.Ein wichtiger Punkt wäre, die richtigen Animations-Dispatcher in ihnen anzurufen.
quelle
Erweitert einfach Ihren Adapter wie unten
Und fügen Sie onBindViewHolder eine Super-Methode hinzu
Es ist eine automatisierte Möglichkeit, animierte Adapter wie "Basheer AL-MOMANI" zu erstellen.
quelle
Ich denke, es ist besser, es so zu verwenden: (im RecyclerView- Adapter überschreiben Sie nur eine einzige Methode)
Wenn Sie möchten, dass jede Animation dort in RV angehängt wird.
quelle