L'animation d'éléments dans la vue de recyclage lorsqu'ils sont liés dans l'adaptateur n'est peut-être pas la meilleure idée car cela peut entraîner l'animation des éléments de la vue de recyclage à différentes vitesses. Dans mon cas, l'élément à la fin de la vue de recyclage s'anime plus rapidement que ceux du haut car ceux du haut doivent continuer à voyager, ce qui le rendait désordonné.
Le code d'origine que j'ai utilisé pour animer chaque élément dans la vue de recyclage peut être trouvé ici:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Mais je vais copier et coller le code en cas de rupture du lien.
ÉTAPE 1: définissez cela dans votre méthode onCreate afin de vous assurer que l'animation ne s'exécute qu'une seule fois:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
ÉTAPE 2: Vous devrez mettre ce code dans la méthode où vous souhaitez démarrer l'animation:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
Dans le lien, l'auteur anime les icônes de la barre d'outils, il l'a donc mis dans cette méthode:
@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;
}
ÉTAPE 3: Maintenant, écrivez la logique de 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();
}
Mon alternative préférée:
Je préfère animer l'ensemble du recyclage au lieu des éléments à l'intérieur du recyclage.
Les ÉTAPES 1 et 2 restent les mêmes.
À l'ÉTAPE 3, dès que votre appel API revient avec vos données, je lance l'animation.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Cela animerait l'intégralité de votre recyclage afin qu'il vole depuis le bas de l'écran.