Анимация элементов в обзоре переработчика, когда они связаны в адаптере, может быть не самой лучшей идеей, поскольку это может привести к тому, что элементы в обзоре переработчика будут анимироваться с разными скоростями. В моем случае, элемент в конце обзора переработчика оживляет свою позицию быстрее, чем те, что наверху, так как те, что наверху, должны перемещаться дальше, поэтому он выглядит неопрятно.
Оригинальный код, который я использовал для анимации каждого элемента в представлении реселлера, можно найти здесь:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Но я скопирую и вставлю код в случае разрыва ссылки.
ШАГ 1. Установите это внутри метода onCreate, чтобы обеспечить запуск анимации только один раз:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
ШАГ 2: Вам нужно будет поместить этот код в метод, с которого вы хотите запустить анимацию:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
В ссылке писатель анимирует значки панели инструментов, поэтому он поместил его в этот метод:
@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;
}
ШАГ 3: Теперь напишите логику для 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();
}
Моя предпочтительная альтернатива:
Я бы предпочел оживить весь обзор переработчика, а не элементы внутри обзора переработчика.
ШАГ 1 и 2 остаются прежними.
В ШАГЕ 3, как только ваш вызов API вернется с вашими данными, я запустил анимацию.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Это оживило бы все ваше представление о переработчике так, чтобы оно отображалось в нижней части экрана.