package android.animation; /** * This class provides a simple callback mechanism to listeners that is synchronized with other * animators in the system. There is no duration, interpolation, or object value-setting * with this Animator. Instead, it is simply started and proceeds to send out events on every * animation frame to its TimeListener (if set), with information about this animator, * the total elapsed time, and the time since the last animation frame. * * @hide */ public class TimeAnimator extends ValueAnimator { private TimeListener mListener; private long mPreviousTime = -1; @Override boolean animationFrame(long currentTime) { if (mPlayingState == STOPPED) { mPlayingState = RUNNING; if (mSeekTime < 0) { mStartTime = currentTime; } else { mStartTime = currentTime - mSeekTime; // Now that we're playing, reset the seek time mSeekTime = -1; } } if (mListener != null) { long totalTime = currentTime - mStartTime; long deltaTime = (mPreviousTime < 0) ? 0 : (currentTime - mPreviousTime); mPreviousTime = currentTime; mListener.onTimeUpdate(this, totalTime, deltaTime); } return false; } /** * Sets a listener that is sent update events throughout the life of * an animation. * * @param listener the listener to be set. */ public void setTimeListener(TimeListener listener) { mListener = listener; } @Override void animateValue(float fraction) { // Noop } @Override void initAnimation() { // noop } /** * Implementors of this interface can set themselves as update listeners * to a <code>TimeAnimator</code> instance to receive callbacks on every animation * frame to receive the total time since the animator started and the delta time * since the last frame. The first time the listener is called, totalTime and * deltaTime should both be zero. * * @hide */ public static interface TimeListener { /** * <p>Notifies listeners of the occurrence of another frame of the animation, * along with information about the elapsed time.</p> * * @param animation The animator sending out the notification. * @param totalTime The */ void onTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime); } }