// Path: app/src/main/java/com/taskdesignsinc/android/myanimeviewer/recyclerview/animator/holder/AnimateViewHolder.java
// public abstract class AnimateViewHolder extends RecyclerView.ViewHolder {
// 
//   public AnimateViewHolder(View itemView) {
//     super(itemView);
//   }
// 
//   public void preAnimateAddImpl() {
//   }
// 
//   public void preAnimateRemoveImpl() {
//   }
// 
//   public abstract void animateAddImpl(Animator.AnimatorListener listener);
// 
//   public abstract void animateRemoveImpl(Animator.AnimatorListener listener);
// }


import java.util.ArrayList;
import java.util.List;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.support.v7.widget.SimpleItemAnimator;
import android.view.View;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.view.ViewHelper;
import com.nineoldandroids.view.ViewPropertyAnimator;
import com.taskdesignsinc.android.myanimeviewer.recyclerview.animator.holder.AnimateViewHolder;

        if (holder instanceof AnimateViewHolder) {
            ((AnimateViewHolder) holder).preAnimateRemoveImpl();
        } else {
            preAnimateRemoveImpl(holder);
        }
    }

    private void preAnimateAdd(final RecyclerView.ViewHolder holder) {
        clear(holder.itemView);

        if (holder instanceof AnimateViewHolder) {
            ((AnimateViewHolder) holder).preAnimateAddImpl();
        } else {
            preAnimateAddImpl(holder);
        }
    }

    private void doAnimateRemove(final RecyclerView.ViewHolder holder) {
        if (holder instanceof AnimateViewHolder) {
            ((AnimateViewHolder) holder).animateRemoveImpl(new DefaultRemoveVpaListener(holder));
        } else {
            animateRemoveImpl(holder);
        }

        mRemoveAnimations.add(holder);
    }

    private void doAnimateAdd(final RecyclerView.ViewHolder holder) {
        if (holder instanceof AnimateViewHolder) {
// Path: app/src/main/java/com/taskdesignsinc/android/myanimeviewer/recyclerview/animator/holder/AnimateViewHolder.java
// public abstract class AnimateViewHolder extends RecyclerView.ViewHolder {
// 
//   public AnimateViewHolder(View itemView) {
//     super(itemView);
//   }
// 
//   public void preAnimateAddImpl() {
//   }
// 
//   public void preAnimateRemoveImpl() {
//   }
// 
//   public abstract void animateAddImpl(Animator.AnimatorListener listener);
// 
//   public abstract void animateRemoveImpl(Animator.AnimatorListener listener);
// }


// Path: app/src/main/java/com/taskdesignsinc/android/myanimeviewer/recyclerview/animator/BaseItemAnimator.java
import java.util.ArrayList;
import java.util.List;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.support.v7.widget.SimpleItemAnimator;
import android.view.View;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.view.ViewHelper;
import com.nineoldandroids.view.ViewPropertyAnimator;
import com.taskdesignsinc.android.myanimeviewer.recyclerview.animator.holder.AnimateViewHolder;


        if (holder instanceof AnimateViewHolder) {
            ((AnimateViewHolder) holder).preAnimateRemoveImpl();
        } else {
            preAnimateRemoveImpl(holder);
        }
    }

    private void preAnimateAdd(final RecyclerView.ViewHolder holder) {
        clear(holder.itemView);

        if (holder instanceof AnimateViewHolder) {
            ((AnimateViewHolder) holder).preAnimateAddImpl();
        } else {
            preAnimateAddImpl(holder);
        }
    }

    private void doAnimateRemove(final RecyclerView.ViewHolder holder) {
        if (holder instanceof AnimateViewHolder) {
            ((AnimateViewHolder) holder).animateRemoveImpl(new DefaultRemoveVpaListener(holder));
        } else {
            animateRemoveImpl(holder);
        }

        mRemoveAnimations.add(holder);
    }

    private void doAnimateAdd(final RecyclerView.ViewHolder holder) {
        if (holder instanceof AnimateViewHolder) {
            ((AnimateViewHolder) holder).animateAddImpl(new DefaultAddVpaListener(holder));