package edu.union;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
/**
* The ViewAnimator is used to animate any view by calling its invalidate method.
*
* @author bburns
*/
public class ViewAnimator extends Handler {
boolean running;
View view;
long nextTime;
int diff;
public static final int NEXT = 0;
/**
* Constructor, defaults to 20 frames/sec.
* @param view The view to animate.
*/
public ViewAnimator(View view) {
this(view, -1);
}
/**
* Constructor
* @param view The view to animate
* @param fps Frames/sec. for the animation
*/
public ViewAnimator(View view, int fps) {
running = false;
this.view = view;
this.diff = 1000/fps;
}
/**
* Starts this animation.
*/
public void start() {
if (!running) {
running = true;
Message msg = obtainMessage(NEXT);
sendMessageAtTime(msg, SystemClock.uptimeMillis());
}
}
/**
* Stops this animation
*/
public void stop() {
running = false;
}
/**
* {@inheritDoc}
**/
public void handleMessage(Message msg) {
if (running && msg.what == NEXT) {
view.invalidate();
msg = obtainMessage(NEXT);
long current = SystemClock.uptimeMillis();
if (nextTime < current) {
nextTime = current + diff;
}
sendMessageAtTime(msg, nextTime);
nextTime += diff;
}
}
}