Animar itens na visualização de reciclagem quando estão ligados no adaptador pode não ser a melhor idéia, pois isso pode fazer com que os itens na visualização de reciclagem sejam animados em velocidades diferentes. No meu caso, o item no final da revisão da animação é animado para sua posição mais rapidamente do que os que estão no topo e os que estão no topo ainda precisam viajar, fazendo com que pareça desarrumado.
O código original que usei para animar cada item na revisão de reciclagem pode ser encontrado aqui:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Mas vou copiar e colar o código, caso o link seja quebrado.
PASSO 1: Defina isso dentro do método onCreate para garantir que a animação seja executada apenas uma vez:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
PASSO 2: Você precisará inserir este código no método em que deseja iniciar a animação:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
No link, o escritor está animando os ícones da barra de ferramentas, então ele o colocou dentro deste método:
@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;
}
PASSO 3: Agora escreva a lógica para o 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();
}
Minha alternativa preferida:
Prefiro animar a visão geral da reciclagem em vez dos itens contidos nela.
Os PASSOS 1 e 2 permanecem os mesmos.
No PASSO 3, assim que sua chamada à API retornar com seus dados, eu iniciaria a animação.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Isso animaria toda a sua reciclagem para que ela voasse da parte inferior da tela.