package com.talent.allshare.widget.switchbutton;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
public abstract class IncrementAnimation {
protected static final int MSG_ANIMATE = 1000;
protected static final int ANIMATION_FRAME_DURATION = 1000 / 60;
protected boolean mAnimating = false;
protected final Handler mHandler = new AnimationHandler();
protected float mAnimationLastTime;
protected float mAnimationPosition;
protected float mAnimatedVelocity;
protected float mAnimatedAcceleration;
protected long mCurrentAnimationTime;
public void setmAnimating(boolean b) {
mAnimating = b;
}
public boolean getmAnimating() {
// TODO Auto-generated method stub
return mAnimating;
}
protected abstract void doAnimation();
protected void incrementAnimation() {
long now = SystemClock.uptimeMillis();
float t = (now - mAnimationLastTime) / 1000.0f; // ms -> s
final float position = mAnimationPosition;
final float v = mAnimatedVelocity; // px/s
final float a = mAnimatedAcceleration; // px/s/s
mAnimationPosition = position + (v * t) + (0.5f * a * t * t);
mAnimatedVelocity = v + (a * t); // px/s
mAnimationLastTime = now; // ms
}
protected abstract void moveView(float position);
private class AnimationHandler extends Handler {
public void handleMessage(Message m) {
switch (m.what) {
case MSG_ANIMATE:
doAnimation();
break;
}
}
}
}