/*
* Created by Hanks
* Copyright (c) 2015 Nashangban. All rights reserved
*
*/
package app.hanks.com.conquer.adapter;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
/**
* RecylerView的item动画
* Created by Hanks on 2015/5/21.
*/
public class ZixiAdapterItemAnimator extends RecyclerView.ItemAnimator{
List<RecyclerView.ViewHolder> mAnimationAddViewHolders = new ArrayList<RecyclerView.ViewHolder>();
List<RecyclerView.ViewHolder> mAnimationRemoveViewHolders = new ArrayList<RecyclerView.ViewHolder>();
//需要执行动画时会系统会调用,用户无需手动调用
@Override
public void runPendingAnimations() {
if (!mAnimationAddViewHolders.isEmpty()) {
AnimatorSet animator;
View target;
for (final RecyclerView.ViewHolder viewHolder : mAnimationAddViewHolders) {
target = viewHolder.itemView;
animator = new AnimatorSet();
animator.playTogether(
ObjectAnimator.ofFloat(target, "translationX", -target.getMeasuredWidth(), 0.0f),
ObjectAnimator.ofFloat(target, "alpha", target.getAlpha(), 1.0f)
);
animator.setTarget(target);
animator.setDuration(100);
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
mAnimationAddViewHolders.remove(viewHolder);
if (!isRunning()) {
dispatchAnimationsFinished();
}
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
}
}
else if(!mAnimationRemoveViewHolders.isEmpty()){
}
}
//remove时系统会调用,返回值表示是否需要执行动画
@Override
public boolean animateRemove(RecyclerView.ViewHolder viewHolder) {
return mAnimationRemoveViewHolders.add(viewHolder);
}
//viewholder添加时系统会调用
@Override
public boolean animateAdd(RecyclerView.ViewHolder viewHolder) {
return mAnimationAddViewHolders.add(viewHolder);
}
@Override
public boolean animateMove(RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) {
return false;
}
@Override
public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) {
return false;
}
@Override
public void endAnimation(RecyclerView.ViewHolder viewHolder) {
}
@Override
public void endAnimations() {
}
@Override
public boolean isRunning() {
return !(mAnimationAddViewHolders.isEmpty()&&mAnimationRemoveViewHolders.isEmpty());
}
}