FileDocCategorySizeDatePackage
Animator.javaAPI DocAndroid 5.1 API20640Thu Mar 12 22:22:08 GMT 2015android.animation

Animator

public abstract class Animator extends Object implements Cloneable
This is the superclass for classes which provide basic support for animations which can be started, ended, and have AnimatorListeners added to them.

Fields Summary
ArrayList
mListeners
The set of listeners to be sent events through the life of an animation.
ArrayList
mPauseListeners
The set of listeners to be sent pause/resume events through the life of an animation.
boolean
mPaused
Whether this animator is currently in a paused state.
int
mChangingConfigurations
A set of flags which identify the type of configuration changes that can affect this Animator. Used by the Animator cache.
private AnimatorConstantState
mConstantState
If this animator is inflated from a constant state, keep a reference to it so that ConstantState will not be garbage collected until this animator is collected
Constructors Summary
Methods Summary
public voidaddListener(android.animation.Animator$AnimatorListener listener)
Adds a listener to the set of listeners that are sent events through the life of an animation, such as start, repeat, and end.

param
listener the listener to be added to the current set of listeners for this animation.

        if (mListeners == null) {
            mListeners = new ArrayList<AnimatorListener>();
        }
        mListeners.add(listener);
    
public voidaddPauseListener(android.animation.Animator$AnimatorPauseListener listener)
Adds a pause listener to this animator.

param
listener the listener to be added to the current set of pause listeners for this animation.

        if (mPauseListeners == null) {
            mPauseListeners = new ArrayList<AnimatorPauseListener>();
        }
        mPauseListeners.add(listener);
    
public voidappendChangingConfigurations(int configs)
Sets the changing configurations value to the union of the current changing configurations and the provided configs. This method is called while loading the animator.

hide

        mChangingConfigurations |= configs;
    
public booleancanReverse()

hide

        return false;
    
public voidcancel()
Cancels the animation. Unlike {@link #end()}, cancel() causes the animation to stop in its tracks, sending an {@link android.animation.Animator.AnimatorListener#onAnimationCancel(Animator)} to its listeners, followed by an {@link android.animation.Animator.AnimatorListener#onAnimationEnd(Animator)} message.

This method must be called on the thread that is running the animation.

    
public android.animation.Animatorclone()

        try {
            final Animator anim = (Animator) super.clone();
            if (mListeners != null) {
                anim.mListeners = new ArrayList<AnimatorListener>(mListeners);
            }
            if (mPauseListeners != null) {
                anim.mPauseListeners = new ArrayList<AnimatorPauseListener>(mPauseListeners);
            }
            return anim;
        } catch (CloneNotSupportedException e) {
           throw new AssertionError();
        }
    
public android.content.res.ConstantStatecreateConstantState()
Return a {@link android.content.res.ConstantState} instance that holds the shared state of this Animator.

This constant state is used to create new instances of this animator when needed, instead of re-loading it from resources. Default implementation creates a new {@link AnimatorConstantState}. You can override this method to provide your custom logic or return null if you don't want this animator to be cached.

return
The ConfigurationBoundResourceCache.BaseConstantState associated to this Animator.
see
android.content.res.ConstantState
see
#clone()
hide

        return new AnimatorConstantState(this);
    
public voidend()
Ends the animation. This causes the animation to assign the end value of the property being animated, then calling the {@link android.animation.Animator.AnimatorListener#onAnimationEnd(Animator)} method on its listeners.

This method must be called on the thread that is running the animation.

    
public intgetChangingConfigurations()
Return a mask of the configuration parameters for which this animator may change, requiring that it should be re-created from Resources. The default implementation returns whatever value was provided through setChangingConfigurations(int) or 0 by default.

return
Returns a mask of the changing configuration parameters, as defined by {@link android.content.pm.ActivityInfo}.
see
android.content.pm.ActivityInfo
hide

        return mChangingConfigurations;
    
public abstract longgetDuration()
Gets the duration of the animation.

return
The length of the animation, in milliseconds.

public TimeInterpolatorgetInterpolator()
Returns the timing interpolator that this animation uses.

return
The timing interpolator for this animation.

        return null;
    
public java.util.ArrayListgetListeners()
Gets the set of {@link android.animation.Animator.AnimatorListener} objects that are currently listening for events on this Animator object.

return
ArrayList The set of listeners.

        return mListeners;
    
public abstract longgetStartDelay()
The amount of time, in milliseconds, to delay processing the animation after {@link #start()} is called.

return
the number of milliseconds to delay running the animation

public booleanisPaused()
Returns whether this animator is currently in a paused state.

return
True if the animator is currently paused, false otherwise.
see
#pause()
see
#resume()

        return mPaused;
    
public abstract booleanisRunning()
Returns whether this Animator is currently running (having been started and gone past any initial startDelay period and not yet ended).

return
Whether the Animator is running.

public booleanisStarted()
Returns whether this Animator has been started and not yet ended. This state is a superset of the state of {@link #isRunning()}, because an Animator with a nonzero {@link #getStartDelay() startDelay} will return true for {@link #isStarted()} during the delay phase, whereas {@link #isRunning()} will return true only after the delay phase is complete.

return
Whether the Animator has been started and not yet ended.

        // Default method returns value for isRunning(). Subclasses should override to return a
        // real value.
        return isRunning();
    
public voidpause()
Pauses a running animation. This method should only be called on the same thread on which the animation was started. If the animation has not yet been {@link #isStarted() started} or has since ended, then the call is ignored. Paused animations can be resumed by calling {@link #resume()}.

see
#resume()
see
#isPaused()
see
AnimatorPauseListener

        if (isStarted() && !mPaused) {
            mPaused = true;
            if (mPauseListeners != null) {
                ArrayList<AnimatorPauseListener> tmpListeners =
                        (ArrayList<AnimatorPauseListener>) mPauseListeners.clone();
                int numListeners = tmpListeners.size();
                for (int i = 0; i < numListeners; ++i) {
                    tmpListeners.get(i).onAnimationPause(this);
                }
            }
        }
    
public voidremoveAllListeners()
Removes all {@link #addListener(android.animation.Animator.AnimatorListener) listeners} and {@link #addPauseListener(android.animation.Animator.AnimatorPauseListener) pauseListeners} from this object.

        if (mListeners != null) {
            mListeners.clear();
            mListeners = null;
        }
        if (mPauseListeners != null) {
            mPauseListeners.clear();
            mPauseListeners = null;
        }
    
public voidremoveListener(android.animation.Animator$AnimatorListener listener)
Removes a listener from the set listening to this animation.

param
listener the listener to be removed from the current set of listeners for this animation.

        if (mListeners == null) {
            return;
        }
        mListeners.remove(listener);
        if (mListeners.size() == 0) {
            mListeners = null;
        }
    
public voidremovePauseListener(android.animation.Animator$AnimatorPauseListener listener)
Removes a pause listener from the set listening to this animation.

param
listener the listener to be removed from the current set of pause listeners for this animation.

        if (mPauseListeners == null) {
            return;
        }
        mPauseListeners.remove(listener);
        if (mPauseListeners.size() == 0) {
            mPauseListeners = null;
        }
    
public voidresume()
Resumes a paused animation, causing the animator to pick up where it left off when it was paused. This method should only be called on the same thread on which the animation was started. Calls to resume() on an animator that is not currently paused will be ignored.

see
#pause()
see
#isPaused()
see
AnimatorPauseListener

        if (mPaused) {
            mPaused = false;
            if (mPauseListeners != null) {
                ArrayList<AnimatorPauseListener> tmpListeners =
                        (ArrayList<AnimatorPauseListener>) mPauseListeners.clone();
                int numListeners = tmpListeners.size();
                for (int i = 0; i < numListeners; ++i) {
                    tmpListeners.get(i).onAnimationResume(this);
                }
            }
        }
    
public voidreverse()

hide

        throw new IllegalStateException("Reverse is not supported");
    
public voidsetAllowRunningAsynchronously(boolean mayRunAsync)

Whether or not the Animator is allowed to run asynchronously off of the UI thread. This is a hint that informs the Animator that it is OK to run the animation off-thread, however the Animator may decide that it must run the animation on the UI thread anyway.

Regardless of whether or not the animation runs asynchronously, all listener callbacks will be called on the UI thread.

To be able to use this hint the following must be true:

  1. The animator is immutable while {@link #isStarted()} is true. Requests to change duration, delay, etc... may be ignored.
  2. Lifecycle callback events may be asynchronous. Events such as {@link Animator.AnimatorListener#onAnimationEnd(Animator)} or {@link Animator.AnimatorListener#onAnimationRepeat(Animator)} may end up delayed as they must be posted back to the UI thread, and any actions performed by those callbacks (such as starting new animations) will not happen in the same frame.
  3. State change requests ({@link #cancel()}, {@link #end()}, {@link #reverse()}, etc...) may be asynchronous. It is guaranteed that all state changes that are performed on the UI thread in the same frame will be applied as a single atomic update, however that frame may be the current frame, the next frame, or some future frame. This will also impact the observed state of the Animator. For example, {@link #isStarted()} may still return true after a call to {@link #end()}. Using the lifecycle callbacks is preferred over queries to {@link #isStarted()}, {@link #isRunning()}, and {@link #isPaused()} for this reason.

hide

        // It is up to subclasses to support this, if they can.
    
public voidsetChangingConfigurations(int configs)
Set a mask of the configuration parameters for which this animator may change, requiring that it be re-created from resource.

param
configs A mask of the changing configuration parameters, as defined by {@link android.content.pm.ActivityInfo}.
see
android.content.pm.ActivityInfo
hide

        mChangingConfigurations = configs;
    
public abstract android.animation.AnimatorsetDuration(long duration)
Sets the duration of the animation.

param
duration The length of the animation, in milliseconds.

public abstract voidsetInterpolator(TimeInterpolator value)
The time interpolator used in calculating the elapsed fraction of the animation. The interpolator determines whether the animation runs with linear or non-linear motion, such as acceleration and deceleration. The default value is {@link android.view.animation.AccelerateDecelerateInterpolator}.

param
value the interpolator to be used by this animation

public abstract voidsetStartDelay(long startDelay)
The amount of time, in milliseconds, to delay processing the animation after {@link #start()} is called.

param
startDelay The amount of the delay, in milliseconds

public voidsetTarget(java.lang.Object target)
Sets the target object whose property will be animated by this animation. Not all subclasses operate on target objects (for example, {@link ValueAnimator}, but this method is on the superclass for the convenience of dealing generically with those subclasses that do handle targets.

param
target The object being animated

    
public voidsetupEndValues()
This method tells the object to use appropriate information to extract ending values for the animation. For example, a AnimatorSet object will pass this call to its child objects to tell them to set up the values. A ObjectAnimator object will use the information it has about its target object and PropertyValuesHolder objects to get the start values for its properties. A ValueAnimator object will ignore the request since it does not have enough information (such as a target object) to gather these values.

    
public voidsetupStartValues()
This method tells the object to use appropriate information to extract starting values for the animation. For example, a AnimatorSet object will pass this call to its child objects to tell them to set up the values. A ObjectAnimator object will use the information it has about its target object and PropertyValuesHolder objects to get the start values for its properties. A ValueAnimator object will ignore the request since it does not have enough information (such as a target object) to gather these values.

    
public voidstart()
Starts this animation. If the animation has a nonzero startDelay, the animation will start running after that delay elapses. A non-delayed animation will have its initial value(s) set immediately, followed by calls to {@link AnimatorListener#onAnimationStart(Animator)} for any listeners of this animator.

The animation started by calling this method will be run on the thread that called this method. This thread should have a Looper on it (a runtime exception will be thrown if this is not the case). Also, if the animation will animate properties of objects in the view hierarchy, then the calling thread should be the UI thread for that view hierarchy.