/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.hangout; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.animation.TimeInterpolator; /** * * @author sihai * */ public class Tweener { private static android.animation.Animator.AnimatorListener mCleanupListener = new AnimatorListenerAdapter() { public final void onAnimationCancel(Animator paramAnimator) { Tweener.access$000(paramAnimator); } public final void onAnimationEnd(Animator paramAnimator) { Tweener.access$000(paramAnimator); } }; private static HashMap sTweens = new HashMap(); ObjectAnimator animator; private Tweener(ObjectAnimator objectanimator) { animator = objectanimator; } private static void replace(ArrayList arraylist, Object aobj[]) { int i = aobj.length; int j = 0; while(j < i) { Object obj = aobj[j]; Tweener tweener = (Tweener)sTweens.get(obj); if(tweener != null) { tweener.animator.cancel(); if(arraylist != null) tweener.animator.setValues((PropertyValuesHolder[])arraylist.toArray(new PropertyValuesHolder[arraylist.size()])); else sTweens.remove(tweener); } j++; } } public static void reset() { sTweens.clear(); } public static Tweener to(Object obj, long l, Object aobj[]) { long l1 = 0L; android.animation.ValueAnimator.AnimatorUpdateListener animatorupdatelistener = null; android.animation.Animator.AnimatorListener animatorlistener = null; TimeInterpolator timeinterpolator = null; ArrayList arraylist = new ArrayList(aobj.length / 2); int i = 0; while(i < aobj.length) { if(!(aobj[i] instanceof String)) throw new IllegalArgumentException((new StringBuilder("Key must be a string: ")).append(aobj[i]).toString()); String s = (String)aobj[i]; Object obj1 = aobj[i + 1]; if(!"simultaneousTween".equals(s)) if("ease".equals(s)) timeinterpolator = (TimeInterpolator)obj1; else if("onUpdate".equals(s) || "onUpdateListener".equals(s)) animatorupdatelistener = (android.animation.ValueAnimator.AnimatorUpdateListener)obj1; else if("onComplete".equals(s) || "onCompleteListener".equals(s)) animatorlistener = (android.animation.Animator.AnimatorListener)obj1; else if("delay".equals(s)) l1 = ((Number)obj1).longValue(); else if(!"syncWith".equals(s)) if(obj1 instanceof float[]) { float af[] = new float[2]; af[0] = ((float[])obj1)[0]; af[1] = ((float[])obj1)[1]; arraylist.add(PropertyValuesHolder.ofFloat(s, af)); } else if(obj1 instanceof Number) arraylist.add(PropertyValuesHolder.ofFloat(s, new float[] { ((Number)obj1).floatValue() })); else throw new IllegalArgumentException((new StringBuilder("Bad argument for key \"")).append(s).append("\" with value ").append(obj1.getClass()).toString()); i += 2; } Tweener tweener = (Tweener)sTweens.get(obj); ObjectAnimator objectanimator; if(tweener == null) { objectanimator = ObjectAnimator.ofPropertyValuesHolder(obj, (PropertyValuesHolder[])arraylist.toArray(new PropertyValuesHolder[arraylist.size()])); tweener = new Tweener(objectanimator); sTweens.put(obj, tweener); } else { objectanimator = ((Tweener)sTweens.get(obj)).animator; replace(arraylist, new Object[] { obj }); } if(timeinterpolator != null) objectanimator.setInterpolator(timeinterpolator); objectanimator.setStartDelay(l1); objectanimator.setDuration(l); if(animatorupdatelistener != null) { objectanimator.removeAllUpdateListeners(); objectanimator.addUpdateListener(animatorupdatelistener); } if(animatorlistener != null) { objectanimator.removeAllListeners(); objectanimator.addListener(animatorlistener); } objectanimator.addListener(mCleanupListener); objectanimator.start(); return tweener; } static void access$000(Animator animator1) { Iterator iterator = sTweens.entrySet().iterator(); do { if(!iterator.hasNext()) break; if(((Tweener)((java.util.Map.Entry)iterator.next()).getValue()).animator != animator1) continue; iterator.remove(); break; } while(true); return; } }