Animar elementos en la vista de reciclaje cuando están unidos en el adaptador podría no ser la mejor idea, ya que puede hacer que los elementos en la vista de reciclaje se animen a diferentes velocidades. En mi caso, el artículo al final de la vista del reciclador se anima a su posición más rápido que los que están en la parte superior, ya que los que están en la parte superior tienen que viajar más, por lo que se ve desordenado.
El código original que utilicé para animar cada elemento en la vista del reciclador se puede encontrar aquí:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Pero copiaré y pegaré el código en caso de que se rompa el enlace.
PASO 1: configure esto dentro de su método onCreate para asegurarse de que la animación solo se ejecute una vez:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
PASO 2: Deberá poner este código en el método donde desea iniciar la animación:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
En el enlace, el escritor está animando los iconos de la barra de herramientas, por lo que lo puso dentro de este 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;
}
PASO 3: Ahora escriba la lógica para 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();
}
Mi alternativa preferida:
Prefiero animar toda la vista del reciclador en lugar de los elementos dentro de la vista del reciclador.
Los PASOS 1 y 2 siguen siendo los mismos.
En el PASO 3, tan pronto como su llamada API regrese con sus datos, comenzaría la animación.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Esto animaría toda su vista de reciclador para que vuele desde la parte inferior de la pantalla.