public class AnimationThread extends Thread { private static final String TAG = AnimationThread.class.getSimpleName(); public static final long DEFAULT_SLEEP_TIME = 25; public static final long DEFAULT_INCREMENT = 1; public static final int STATE_ZOOM_UNKNOW = 0x00; public static final int STATE_ZOOM_OUT = 0x01; public static final int STATE_ZOOM_IN = 0x02;
public interface AnimationListener{ void onStart(); void onEnd(); void onError(); }
public AnimationThread(View view, float startScale, float endScale, float increment, long sleepTime) { this(view, startScale, endScale, increment); this.sleepTime = sleepTime; }
public float getCurrentScale() { return currentScale; }
public void setOnListener(AnimationListener listener) { this.listener = listener; }
public boolean isNormalOver() { return normalOver; }
public void setEndScale(float value) { endScale = value; }
public void setCurrentScale(float value) { currentScale = value; }
public void setSleepTime(long time) { sleepTime = time; }
public void setAnimationState(int flag) { if (flag != STATE_ZOOM_OUT && flag != STATE_ZOOM_IN) { throw new IllegalArgumentException("flag[" + flag + "] value is error."); }
if (animationState != flag) { animationState = flag; synchronized (TAG) { if (animationState == STATE_ZOOM_OUT) { if (currentScale < endScale) { switchStart2EndScaleLocked(); } } else { if (currentScale > endScale) { switchStart2EndScaleLocked(); } } } } } public void changeAnimationState() { if (animationState == STATE_ZOOM_IN) { synchronized (TAG) { animationState = STATE_ZOOM_OUT; if (currentScale < endScale) { switchStart2EndScaleLocked(); } } } else { synchronized (TAG) { animationState = STATE_ZOOM_IN; if (currentScale > endScale) { switchStart2EndScaleLocked(); } } } }
public int getAnimationState() { return animationState; }
public void stopAnimation() { doNotNeedAnimation = true; }
@Override public void run() { try { if (listener != null) { listener.onStart(); }