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:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
SCHRITT 2: Sie müssen diesen Code in die Methode einfügen, mit der Sie die Animation starten möchten:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
In dem Link animiert der Autor die Symbolleistensymbole, also fügt er sie in diese Methode ein:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
inboxMenuItem = menu.findItem(R.id.action_inbox);
inboxMenuItem.setActionView(R.layout.menu_item_view);
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
return true;
}
SCHRITT 3: Schreiben Sie nun die Logik für startIntroAnimation ():
private static final int ANIM_DURATION_TOOLBAR = 300;
private void startIntroAnimation() {
btnCreate.setTranslationY(2 * getResources().getDimensionPixelOffset(R.dimen.btn_fab_size));
int actionbarSize = Utils.dpToPx(56);
toolbar.setTranslationY(-actionbarSize);
ivLogo.setTranslationY(-actionbarSize);
inboxMenuItem.getActionView().setTranslationY(-actionbarSize);
toolbar.animate()
.translationY(0)
.setDuration(ANIM_DURATION_TOOLBAR)
.setStartDelay(300);
ivLogo.animate()
.translationY(0)
.setDuration(ANIM_DURATION_TOOLBAR)
.setStartDelay(400);
inboxMenuItem.getActionView().animate()
.translationY(0)
.setDuration(ANIM_DURATION_TOOLBAR)
.setStartDelay(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
startContentAnimation();
}
})
.start();
}
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.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Dies würde Ihre gesamte Recycling-Ansicht so animieren, dass sie vom unteren Bildschirmrand einfliegt.