Các mục hoạt hình trong bộ tái chế khi chúng được liên kết trong bộ chuyển đổi có thể không phải là ý tưởng tốt nhất vì điều đó có thể khiến các mục trong bộ tái chế hoạt động ở các tốc độ khác nhau. Trong trường hợp của tôi, vật phẩm ở cuối recyclerview hoạt động nhanh hơn vị trí của chúng sau đó những vật phẩm ở trên đỉnh như những vật ở trên đỉnh có thể di chuyển xa hơn khiến nó trông không gọn gàng.
Mã ban đầu mà tôi đã sử dụng để tạo hiệu ứng cho từng mục vào recyclerview có thể được tìm thấy ở đây:
http://frogermcs.github.io/Instagram-with-M vật liệu-Design-conception-is-gett-real /
Nhưng tôi sẽ sao chép và dán mã trong trường hợp liên kết bị đứt.
BƯỚC 1: Đặt cái này bên trong phương thức onCreate của bạn để bạn đảm bảo hoạt hình chỉ chạy một lần:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
BƯỚC 2: Bạn sẽ cần đặt mã này vào phương thức mà bạn muốn bắt đầu hoạt hình:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
Trong liên kết, người viết đang tạo hiệu ứng cho các biểu tượng trên thanh công cụ, vì vậy anh ta đặt nó bên trong phương thức này:
@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;
}
BƯỚC 3: Bây giờ hãy viết logic cho 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();
}
Lựa chọn thay thế ưa thích của tôi:
Tôi thà làm động toàn bộ recyclerview thay vì các vật phẩm bên trong recyclerview.
BƯỚC 1 và 2 vẫn giữ nguyên.
Trong BƯỚC 3, ngay khi cuộc gọi API của bạn trở lại với dữ liệu của bạn, tôi sẽ bắt đầu hoạt hình.
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
Điều này sẽ làm sinh động toàn bộ bộ tái chế của bạn để nó bay vào từ phía dưới màn hình.