package com.arpitonline.freeflow.artbook; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.view.MotionEvent; import android.view.View; import com.comcast.freeflow.animations.DefaultLayoutAnimator; import com.comcast.freeflow.animations.interpolators.EaseInOutQuintInterpolator; import com.comcast.freeflow.core.FreeFlowItem; import com.comcast.freeflow.utils.MathUtils; public class CardIncomingAnimation extends DefaultLayoutAnimator{ public HashMap<View, PropertyValuesHolder> yAnims; @Override protected AnimatorSet getItemsAddedAnimation(List<FreeFlowItem> added) { appearingSet = new AnimatorSet(); yAnims = new HashMap<View, PropertyValuesHolder>(); appearingSet.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } }); ArrayList<Animator> addedAnims = new ArrayList<Animator>(); for (FreeFlowItem proxy : added) { proxy.view.setRotation(45f); float y = proxy.view.getY(); proxy.view.setY(y + 2400f); PropertyValuesHolder a1 = PropertyValuesHolder.ofFloat( View.ROTATION, 0); PropertyValuesHolder a2 = PropertyValuesHolder.ofFloat(View.Y, y); yAnims.put(proxy.view, a2); ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder( proxy.view, a1, a2); anim.setDuration(MathUtils.randRange(800, 2000)); anim.setInterpolator(new EaseInOutQuintInterpolator()); addedAnims.add(anim); } appearingSet.playTogether(addedAnims); return appearingSet; } @Override public void cancel() { if(appearingSet != null && appearingSet.isRunning()){ appearingSet.cancel(); for( Animator s : appearingSet.getChildAnimations()){ ObjectAnimator a = (ObjectAnimator)s; a.cancel(); View v = (View)a.getTarget(); v.setTranslationY(0); v.setTranslationX(0); v.setRotation(0); } } } @Override public void onContainerTouchDown(MotionEvent event) { cancel(); } }