FileDocCategorySizeDatePackage
TransitionSet.javaAPI DocAndroid 5.1 API19785Thu Mar 12 22:22:10 GMT 2015android.transition

TransitionSet

public class TransitionSet extends Transition
A TransitionSet is a parent of child transitions (including other TransitionSets). Using TransitionSets enables more complex choreography of transitions, where some sets play {@link #ORDERING_TOGETHER} and others play {@link #ORDERING_SEQUENTIAL}. For example, {@link AutoTransition} uses a TransitionSet to sequentially play a Fade(Fade.OUT), followed by a {@link ChangeBounds}, followed by a Fade(Fade.OUT) transition.

A TransitionSet can be described in a resource file by using the tag transitionSet, along with the standard attributes of {@link android.R.styleable#TransitionSet} and {@link android.R.styleable#Transition}. Child transitions of the TransitionSet object can be loaded by adding those child tags inside the enclosing transitionSet tag. For example, the following xml describes a TransitionSet that plays a Fade and then a ChangeBounds transition on the affected view targets:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequential">
<fade/>
<changeBounds/>
</transitionSet>

Fields Summary
ArrayList
mTransitions
private boolean
mPlayTogether
int
mCurrentListeners
boolean
mStarted
public static final int
ORDERING_TOGETHER
A flag used to indicate that the child transitions of this set should all start at the same time.
public static final int
ORDERING_SEQUENTIAL
A flag used to indicate that the child transitions of this set should play in sequence; when one child transition ends, the next child transition begins. Note that a transition does not end until all instances of it (which are playing on all applicable targets of the transition) end.
Constructors Summary
public TransitionSet()
Constructs an empty transition set. Add child transitions to the set by calling {@link #addTransition(Transition)} )}. By default, child transitions will play {@link #ORDERING_TOGETHER together}.


                                  
      
    
public TransitionSet(android.content.Context context, android.util.AttributeSet attrs)

        super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TransitionSet);
        int ordering = a.getInt(R.styleable.TransitionSet_transitionOrdering,
                TransitionSet.ORDERING_TOGETHER);
        setOrdering(ordering);
        a.recycle();
    
Methods Summary
public android.transition.TransitionSetaddListener(TransitionListener listener)

        return (TransitionSet) super.addListener(listener);
    
public android.transition.TransitionSetaddTarget(android.view.View target)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).addTarget(target);
        }
        return (TransitionSet) super.addTarget(target);
    
public android.transition.TransitionSetaddTarget(int targetId)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).addTarget(targetId);
        }
        return (TransitionSet) super.addTarget(targetId);
    
public android.transition.TransitionSetaddTarget(java.lang.String targetName)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).addTarget(targetName);
        }
        return (TransitionSet) super.addTarget(targetName);
    
public android.transition.TransitionSetaddTarget(java.lang.Class targetType)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).addTarget(targetType);
        }
        return (TransitionSet) super.addTarget(targetType);
    
public android.transition.TransitionSetaddTransition(Transition transition)
Adds child transition to this set. The order in which this child transition is added relative to other child transitions that are added, in addition to the {@link #getOrdering() ordering} property, determines the order in which the transitions are started.

If this transitionSet has a {@link #getDuration() duration} set on it, the child transition will inherit that duration. Transitions are assumed to have a maximum of one transitionSet parent.

param
transition A non-null child transition to be added to this set.
return
This transitionSet object.

        if (transition != null) {
            mTransitions.add(transition);
            transition.mParent = this;
            if (mDuration >= 0) {
                transition.setDuration(mDuration);
            }
        }
        return this;
    
protected voidcancel()

hide

        super.cancel();
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).cancel();
        }
    
public voidcaptureEndValues(TransitionValues transitionValues)

        if (isValidTarget(transitionValues.view)) {
            for (Transition childTransition : mTransitions) {
                if (childTransition.isValidTarget(transitionValues.view)) {
                    childTransition.captureEndValues(transitionValues);
                    transitionValues.targetedTransitions.add(childTransition);
                }
            }
        }
    
voidcapturePropagationValues(TransitionValues transitionValues)

        super.capturePropagationValues(transitionValues);
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).capturePropagationValues(transitionValues);
        }
    
public voidcaptureStartValues(TransitionValues transitionValues)

        if (isValidTarget(transitionValues.view)) {
            for (Transition childTransition : mTransitions) {
                if (childTransition.isValidTarget(transitionValues.view)) {
                    childTransition.captureStartValues(transitionValues);
                    transitionValues.targetedTransitions.add(childTransition);
                }
            }
        }
    
public android.transition.TransitionSetclone()

        TransitionSet clone = (TransitionSet) super.clone();
        clone.mTransitions = new ArrayList<Transition>();
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            clone.addTransition((Transition) mTransitions.get(i).clone());
        }
        return clone;
    
protected voidcreateAnimators(android.view.ViewGroup sceneRoot, TransitionValuesMaps startValues, TransitionValuesMaps endValues, java.util.ArrayList startValuesList, java.util.ArrayList endValuesList)

hide

        long startDelay = getStartDelay();
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; i++) {
            Transition childTransition = mTransitions.get(i);
            // We only set the start delay on the first transition if we are playing
            // the transitions sequentially.
            if (startDelay > 0 && (mPlayTogether || i == 0)) {
                long childStartDelay = childTransition.getStartDelay();
                if (childStartDelay > 0) {
                    childTransition.setStartDelay(startDelay + childStartDelay);
                } else {
                    childTransition.setStartDelay(startDelay);
                }
            }
            childTransition.createAnimators(sceneRoot, startValues, endValues, startValuesList,
                    endValuesList);
        }
    
public TransitionexcludeTarget(android.view.View target, boolean exclude)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).excludeTarget(target, exclude);
        }
        return super.excludeTarget(target, exclude);
    
public TransitionexcludeTarget(java.lang.String targetName, boolean exclude)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).excludeTarget(targetName, exclude);
        }
        return super.excludeTarget(targetName, exclude);
    
public TransitionexcludeTarget(int targetId, boolean exclude)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).excludeTarget(targetId, exclude);
        }
        return super.excludeTarget(targetId, exclude);
    
public TransitionexcludeTarget(java.lang.Class type, boolean exclude)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).excludeTarget(type, exclude);
        }
        return super.excludeTarget(type, exclude);
    
public voidforceVisibility(int visibility, boolean isStartValue)

hide

        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; i++) {
            mTransitions.get(i).forceVisibility(visibility, isStartValue);
        }
    
public intgetOrdering()
Returns the ordering of this TransitionSet. By default, the value is {@link #ORDERING_TOGETHER}.

return
{@link #ORDERING_TOGETHER} if child transitions will play at the same time, {@link #ORDERING_SEQUENTIAL} if they will play in sequence.
see
#setOrdering(int)

        return mPlayTogether ? ORDERING_TOGETHER : ORDERING_SEQUENTIAL;
    
public TransitiongetTransitionAt(int index)
Returns the child Transition at the specified position in the TransitionSet.

param
index The position of the Transition to retrieve.
see
#addTransition(Transition)
see
#getTransitionCount()

        if (index < 0 || index >= mTransitions.size()) {
            return null;
        }
        return mTransitions.get(index);
    
public intgetTransitionCount()
Returns the number of child transitions in the TransitionSet.

return
The number of child transitions in the TransitionSet.
see
#addTransition(Transition)
see
#getTransitionAt(int)

        return mTransitions.size();
    
public voidpause(android.view.View sceneRoot)

hide

        super.pause(sceneRoot);
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).pause(sceneRoot);
        }
    
public android.transition.TransitionSetremoveListener(TransitionListener listener)

        return (TransitionSet) super.removeListener(listener);
    
public android.transition.TransitionSetremoveTarget(int targetId)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).removeTarget(targetId);
        }
        return (TransitionSet) super.removeTarget(targetId);
    
public android.transition.TransitionSetremoveTarget(android.view.View target)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).removeTarget(target);
        }
        return (TransitionSet) super.removeTarget(target);
    
public android.transition.TransitionSetremoveTarget(java.lang.Class target)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).removeTarget(target);
        }
        return (TransitionSet) super.removeTarget(target);
    
public android.transition.TransitionSetremoveTarget(java.lang.String target)

        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).removeTarget(target);
        }
        return (TransitionSet) super.removeTarget(target);
    
public android.transition.TransitionSetremoveTransition(Transition transition)
Removes the specified child transition from this set.

param
transition The transition to be removed.
return
This transitionSet object.

        mTransitions.remove(transition);
        transition.mParent = null;
        return this;
    
public voidresume(android.view.View sceneRoot)

hide

        super.resume(sceneRoot);
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).resume(sceneRoot);
        }
    
protected voidrunAnimators()

hide

        if (mTransitions.isEmpty()) {
            start();
            end();
            return;
        }
        setupStartEndListeners();
        int numTransitions = mTransitions.size();
        if (!mPlayTogether) {
            // Setup sequence with listeners
            // TODO: Need to add listeners in such a way that we can remove them later if canceled
            for (int i = 1; i < numTransitions; ++i) {
                Transition previousTransition = mTransitions.get(i - 1);
                final Transition nextTransition = mTransitions.get(i);
                previousTransition.addListener(new TransitionListenerAdapter() {
                    @Override
                    public void onTransitionEnd(Transition transition) {
                        nextTransition.runAnimators();
                        transition.removeListener(this);
                    }
                });
            }
            Transition firstTransition = mTransitions.get(0);
            if (firstTransition != null) {
                firstTransition.runAnimators();
            }
        } else {
            for (int i = 0; i < numTransitions; ++i) {
                mTransitions.get(i).runAnimators();
            }
        }
    
voidsetCanRemoveViews(boolean canRemoveViews)

        super.setCanRemoveViews(canRemoveViews);
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).setCanRemoveViews(canRemoveViews);
        }
    
public android.transition.TransitionSetsetDuration(long duration)
Setting a non-negative duration on a TransitionSet causes all of the child transitions (current and future) to inherit this duration.

param
duration The length of the animation, in milliseconds.
return
This transitionSet object.

        super.setDuration(duration);
        if (mDuration >= 0 && mTransitions != null) {
            int numTransitions = mTransitions.size();
            for (int i = 0; i < numTransitions; ++i) {
                mTransitions.get(i).setDuration(duration);
            }
        }
        return this;
    
public voidsetEpicenterCallback(EpicenterCallback epicenterCallback)

        super.setEpicenterCallback(epicenterCallback);
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).setEpicenterCallback(epicenterCallback);
        }
    
public android.transition.TransitionSetsetInterpolator(android.animation.TimeInterpolator interpolator)

        return (TransitionSet) super.setInterpolator(interpolator);
    
public android.transition.TransitionSetsetOrdering(int ordering)
Sets the play order of this set's child transitions.

param
ordering {@link #ORDERING_TOGETHER} to play this set's child transitions together, {@link #ORDERING_SEQUENTIAL} to play the child transitions in sequence.
return
This transitionSet object.

        switch (ordering) {
            case ORDERING_SEQUENTIAL:
                mPlayTogether = false;
                break;
            case ORDERING_TOGETHER:
                mPlayTogether = true;
                break;
            default:
                throw new AndroidRuntimeException("Invalid parameter for TransitionSet " +
                        "ordering: " + ordering);
        }
        return this;
    
public voidsetPathMotion(PathMotion pathMotion)

        super.setPathMotion(pathMotion);
        for (int i = 0; i < mTransitions.size(); i++) {
            mTransitions.get(i).setPathMotion(pathMotion);
        }
    
public voidsetPropagation(TransitionPropagation propagation)

        super.setPropagation(propagation);
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).setPropagation(propagation);
        }
    
android.transition.TransitionSetsetSceneRoot(android.view.ViewGroup sceneRoot)

        super.setSceneRoot(sceneRoot);
        int numTransitions = mTransitions.size();
        for (int i = 0; i < numTransitions; ++i) {
            mTransitions.get(i).setSceneRoot(sceneRoot);
        }
        return (TransitionSet) this;
    
public android.transition.TransitionSetsetStartDelay(long startDelay)

        return (TransitionSet) super.setStartDelay(startDelay);
    
private voidsetupStartEndListeners()
Sets up listeners for each of the child transitions. This is used to determine when this transition set is finished (all child transitions must finish first).

        TransitionSetListener listener = new TransitionSetListener(this);
        for (Transition childTransition : mTransitions) {
            childTransition.addListener(listener);
        }
        mCurrentListeners = mTransitions.size();
    
java.lang.StringtoString(java.lang.String indent)

        String result = super.toString(indent);
        for (int i = 0; i < mTransitions.size(); ++i) {
            result += "\n" + mTransitions.get(i).toString(indent + "  ");
        }
        return result;