L'animazione degli oggetti nella vista riciclo quando sono associati nell'adattatore potrebbe non essere la migliore idea in quanto ciò può causare l'animazione degli oggetti nella vista riciclo a velocità diverse. Nel mio caso, l'elemento alla fine della vista di riciclo si animano nella loro posizione più rapidamente di quelli in alto poiché quelli in alto devono spostarsi ulteriormente in modo da renderlo disordinato.
Il codice originale che ho usato per animare ogni elemento nella vista riciclo è disponibile qui:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Ma copierò e incollerò il codice in caso di interruzione del collegamento.
PASSAGGIO 1: impostalo all'interno del metodo onCreate in modo da assicurarti che l'animazione venga eseguita una sola volta:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
PASSAGGIO 2: dovrai inserire questo codice nel metodo in cui desideri avviare l'animazione:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
Nel link, lo scrittore sta animando le icone della barra degli strumenti, quindi l'ha inserito in questo metodo:
@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;
}
PASSAGGIO 3: ora scrivi la logica per 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();
}
La mia alternativa preferita:
Preferirei animare l'intero recyclerview invece degli elementi all'interno del recyclerview.
I PASSI 1 e 2 rimangono gli stessi.
In STEP 3, non appena la tua chiamata API torna con i tuoi dati, vorrei avviare l'animazione.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Ciò animerebbe l'intera vista di riciclo in modo che voli dalla parte inferiore dello schermo.