Uprościło tylko za pomocą XML
Odwiedź Gist Link
res / anim / layout_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/item_animation_fall_down"
android:animationOrder="normal"
android:delay="15%" />
res / anim / item_animation_fall_down.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500">
<translate
android:fromYDelta="-20%"
android:toYDelta="0"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<alpha
android:fromAlpha="0"
android:toAlpha="1"
android:interpolator="@android:anim/decelerate_interpolator"
/>
<scale
android:fromXScale="105%"
android:fromYScale="105%"
android:toXScale="100%"
android:toYScale="100%"
android:pivotX="50%"
android:pivotY="50%"
android:interpolator="@android:anim/decelerate_interpolator"
/>
</set>
Użyj w układach i widoku recylcer, takich jak:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/layout_animation"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
recyclerView.scheduleLayoutAnimation()
po zmianie zestawu danych, jeśli nie, animacja nie zadziała.EDYTOWAĆ :
Zgodnie z dokumentacją ItemAnimator :
Więc jeśli nie dodasz swoich elementów jeden po drugim
RecyclerView
i nie odświeżysz widoku przy każdej iteracji, nie sądzę, żeItemAnimator
jest to rozwiązanie dla twojej potrzeby.Oto w jaki sposób można animować
RecyclerView
elementy, które pojawiają się za pomocą CustomAdapter:A Twój custom_item_layout wyglądałby tak:
Aby uzyskać więcej informacji na temat adapterów niestandardowych i
RecyclerView
zapoznaj się z tym szkoleniem w oficjalnej dokumentacji .Problemy z szybkim przewijaniem
Korzystanie z tej metody może powodować problemy z szybkim przewijaniem. Widok może być ponownie wykorzystany podczas trwania animacji. Aby tego uniknąć, zaleca się wyczyszczenie animacji po odłączeniu.
W CustomViewHolder:
Stara odpowiedź:
Rzuć okiem na repozytorium Gabriele Mariotti , jestem prawie pewien, że znajdziesz to, czego potrzebujesz. Zapewnia proste ItemAnimators dla RecyclerView, takie jak SlideInItemAnimator lub SlideScaleItemAnimator.
źródło
onViewDetachedFromWindow
i wywołaćclearAnimation
widok. Problem polega na tym, że są uruchomione animacje, gdy RecyclerView próbuje ponownie użyć widoku.Animowałem zanikanie
Recyclerview
przedmiotów, gdy pojawiają się po raz pierwszy, jak pokazano w poniższym kodzie. Być może przyda się to komuś.Możesz także zastąpić
setFadeAnimation()
następujące elementy,setScaleAnimation()
aby animować wygląd przedmiotów, skalując je od punktu:Powyższy kod zawiera brodawki, o ile podczas przewijania
RecyclerView
elementy zawsze blakną lub skalują się. Jeśli chcesz, możesz dodać kod, aby zezwolić na animację, gdy fragment lub działanie zawierające jeRecyclerView
zostanie utworzone po raz pierwszy (np. Uzyskaj czas systemowy na utworzenie i zezwól na animację tylko dla pierwszych milisekund FADE_DURATION).źródło
Stworzyłem animację na podstawie odpowiedzi PBM niewiele,
modification
aby aninmacja przebiegła tylko razinnymi słowy
Animation appear with you scroll down only
i w
onBindViewHolder
wywołaniu funkcjiźródło
lastPosition
reprezentuje liczbę renderowanych widoków, więc jest to jego początkowa wartość-1
, za każdym razem, gdy renderowany jest nowy widok, rozpoczynamy animację i zwiększamy pozycjęMożesz dodać
android:layoutAnimation="@anim/rv_item_animation"
atrybutRecyclerView
podobny do tego:dzięki za doskonały artykuł tutaj: https://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-1-list-75a874a5d213
źródło
Dobrym miejscem do rozpoczęcia jest: https://github.com/wasabeef/recyclerview-animators/blob/master/animators/src/main/java/jp/wasabeef/recyclerview/adapters/AnimationAdapter.java
Nie potrzebujesz nawet pełnej biblioteki, ta klasa wystarczy. Następnie, jeśli po prostu zaimplementujesz klasę Adaptera, dając animatorowi tak:
podczas przewijania zobaczysz elementy pojawiające się od dołu, unikając także problemu z szybkim przewijaniem.
źródło
Animowanie elementów w widoku recyklera, gdy są one powiązane w adapterze, może nie być najlepszym pomysłem, ponieważ może powodować animację elementów w widoku recyklera przy różnych prędkościach. W moim przypadku element na końcu recyrkulatora ożywi się do swojej pozycji szybciej niż te na górze, ponieważ te na górze muszą się dalej przemieszczać, przez co wyglądają niechlujnie.
Oryginalny kod, którego użyłem do animacji każdego elementu w widoku recyklingu, można znaleźć tutaj:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Ale skopiuję i wkleję kod na wypadek, gdyby link się zepsuł.
KROK 1: Ustaw to w swojej metodzie onCreate, tak aby animacja była uruchamiana tylko raz:
KROK 2: Musisz wprowadzić ten kod do metody, w której chcesz rozpocząć animację:
W łączu pisarz animuje ikony paska narzędzi, więc umieścił go w tej metodzie:
KROK 3: Teraz napisz logikę dla startIntroAnimation ():
Moja preferowana alternatywa:
Wolałbym animować cały widok recyclingler zamiast elementów w widoku recyclingler.
KROK 1 i 2 pozostają takie same.
W KROKU 3, gdy tylko wywołanie interfejsu API powróci z danymi, rozpocznę animację.
Spowoduje to animację całego widoku recyklera, tak aby leciał od dołu ekranu.
źródło
latestPostRecyclerview
?Utwórz tę metodę w adapterze recyclinglerview
I wreszcie dodaj ten wiersz kodu w onBindViewHolder
setZoomInAnimation(holder.itemView);
źródło
W 2019 r. Sugerowałbym umieszczenie wszystkich animacji przedmiotów w ItemAnimator.
Zacznijmy od zadeklarowania animatora w widoku recyklingu:
Zadeklaruj niestandardowego animatora,
Podobnie jak powyższe, jeden dotyczy zniknięcia
animateDisappearance
, dodaniaanimateAdd
, zmianyanimateChange
i przeniesieniaanimateMove
.Jednym z ważnych punktów byłoby nazywanie w nich właściwych dyspozytorów animacji.
źródło
Po prostu rozszerza swój adapter, jak poniżej
I dodaj super metodę do onBindViewHolder
To zautomatyzowany sposób tworzenia animowanych adapterów, takich jak „Basheer AL-MOMANI”
źródło
Myślę, że lepiej użyć tego w ten sposób: (w adapterze RecyclerView zastąp tylko jedną metodę)
Jeśli chcesz, aby każda załączona animacja była w RV.
źródło