Animasi item di recyclerview ketika mereka diikat di adaptor mungkin bukan ide terbaik karena hal itu dapat menyebabkan item dalam recyclerview hidup dengan kecepatan yang berbeda. Dalam kasus saya, item pada akhir recyclerview menghidupkan posisi mereka lebih cepat daripada yang di atas sebagai yang di atas harus lebih jauh untuk bepergian sehingga membuatnya tampak berantakan.
Kode asli yang saya gunakan untuk menganimasikan setiap item ke dalam recyclerview dapat ditemukan di sini:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Tapi saya akan menyalin dan menempelkan kode jika tautan rusak.
LANGKAH 1: Setel ini di dalam metode onCreate Anda sehingga Anda memastikan animasi hanya berjalan sekali:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
LANGKAH 2: Anda harus memasukkan kode ini ke metode di mana Anda ingin memulai animasi:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
Di tautan, penulis menghidupkan ikon ikon bilah alat, jadi ia memasukkannya ke dalam metode ini:
@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;
}
LANGKAH 3: Sekarang tulis logika untuk 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();
}
Alternatif pilihan saya:
Saya lebih suka menghidupkan seluruh recyclerview daripada barang-barang di dalam recyclerview.
LANGKAH 1 dan 2 tetap sama.
Di LANGKAH 3, segera setelah panggilan API Anda kembali dengan data Anda, saya akan memulai animasi.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Ini akan menghidupkan seluruh tinjauan ulang Anda sehingga dapat terbang dari bagian bawah layar.