@Override public boolean addPendingAnimation(@NonNull RecyclerView.ViewHolder oldHolder, @Nullable RecyclerView.ViewHolder newHolder, int fromX, int fromY, int toX, int toY) { final float prevTranslationX = oldHolder.itemView.getTranslationX(); final float prevTranslationY = oldHolder.itemView.getTranslationY(); final float prevAlpha = oldHolder.itemView.getAlpha(); resetAnimation(oldHolder); final int deltaX = (int) (toX - fromX - prevTranslationX); final int deltaY = (int) (toY - fromY - prevTranslationY); // recover prev translation state after ending animation oldHolder.itemView.setTranslationX(prevTranslationX); oldHolder.itemView.setTranslationY(prevTranslationY); oldHolder.itemView.setAlpha(prevAlpha); if (newHolder != null) { // carry over translation values resetAnimation(newHolder); newHolder.itemView.setTranslationX(-deltaX); newHolder.itemView.setTranslationY(-deltaY); newHolder.itemView.setAlpha(0); } enqueuePendingAnimationInfo(new ChangeAnimationInfo(oldHolder, newHolder, fromX, fromY, toX, toY)); return true; } }
@Override protected void onSetup() { setItemAddAnimationsManager(new DefaultItemAddAnimationManager(this)); setItemRemoveAnimationManager(new SwipeDismissItemRemoveAnimationManager(this)); setItemChangeAnimationsManager(new DefaultItemChangeAnimationManager(this)); setItemMoveAnimationsManager(new DefaultItemMoveAnimationManager(this)); setRemoveDuration(150); setMoveDuration(150); }
@Override protected void onCreateChangeAnimationForOldItem(@NonNull ChangeAnimationInfo info) { final ViewPropertyAnimatorCompat animator = ViewCompat.animate(info.oldHolder.itemView); animator.setDuration(getDuration()); animator.translationX(info.toX - info.fromX); animator.translationY(info.toY - info.fromY); animator.alpha(0); startActiveItemAnimation(info, info.oldHolder, animator); }
@Override protected void onCreateChangeAnimationForNewItem(@NonNull ChangeAnimationInfo info) { final ViewPropertyAnimatorCompat animator = ViewCompat.animate(info.newHolder.itemView); animator.translationX(0); animator.translationY(0); animator.setDuration(getDuration()); animator.alpha(1); startActiveItemAnimation(info, info.newHolder, animator); }
@Override protected void onSetup() { setItemAddAnimationsManager(new DefaultItemAddAnimationManager(this)); setItemRemoveAnimationManager(new DefaultItemRemoveAnimationManager(this)); setItemChangeAnimationsManager(new DefaultItemChangeAnimationManager(this)); setItemMoveAnimationsManager(new DefaultItemMoveAnimationManager(this)); }