TransitionSet.java revision ecd857be3946283ebb4306e2c03ae70f5c5bb152
1faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/* 2faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Copyright (C) 2013 The Android Open Source Project 3faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 4faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 5faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * you may not use this file except in compliance with the License. 6faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * You may obtain a copy of the License at 7faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 8faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 9faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 10faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Unless required by applicable law or agreed to in writing, software 11faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 12faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * See the License for the specific language governing permissions and 14faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * limitations under the License. 15faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 166ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase 17d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepackage android.transition; 18faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 19ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport com.android.internal.R; 20ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 21d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.animation.TimeInterpolator; 22ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.content.Context; 23ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.content.res.TypedArray; 24faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.util.AndroidRuntimeException; 25ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mountimport android.util.AttributeSet; 26d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.view.View; 27faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup; 28faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 29faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport java.util.ArrayList; 30faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 31faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/** 32d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A TransitionSet is a parent of child transitions (including other 33d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * TransitionSets). Using TransitionSets enables more complex 34d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * choreography of transitions, where some sets play {@link #ORDERING_TOGETHER} and 35d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * others play {@link #ORDERING_SEQUENTIAL}. For example, {@link AutoTransition} 36d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * uses a TransitionSet to sequentially play a Fade(Fade.OUT), followed by 37d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * a {@link ChangeBounds}, followed by a Fade(Fade.OUT) transition. 38aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * 39aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <p>A TransitionSet can be described in a resource file by using the 40aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * tag <code>transitionSet</code>, along with the standard 41aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * attributes of {@link android.R.styleable#TransitionSet} and 42aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * {@link android.R.styleable#Transition}. Child transitions of the 43aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * TransitionSet object can be loaded by adding those child tags inside the 44aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * enclosing <code>transitionSet</code> tag. For example, the following xml 45aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * describes a TransitionSet that plays a Fade and then a ChangeBounds 46aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * transition on the affected view targets:</p> 47aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <pre> 48aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <transitionSet xmlns:android="http://schemas.android.com/apk/res/android" 49aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * android:ordering="sequential"> 50aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <fade/> 51aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <changeBounds/> 52aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * </transitionSet> 53aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * </pre> 54faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 55d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepublic class TransitionSet extends Transition { 56faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 57faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ArrayList<Transition> mTransitions = new ArrayList<Transition>(); 58faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private boolean mPlayTogether = true; 59faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase int mCurrentListeners; 60faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase boolean mStarted = false; 61faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 62faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 63d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A flag used to indicate that the child transitions of this set 64faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * should all start at the same time. 65faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 66d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public static final int ORDERING_TOGETHER = 0; 67faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 68d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A flag used to indicate that the child transitions of this set should 69faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * play in sequence; when one child transition ends, the next child 70faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transition begins. Note that a transition does not end until all 71faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * instances of it (which are playing on all applicable targets of the 72faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transition) end. 73faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 74d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public static final int ORDERING_SEQUENTIAL = 1; 75faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 76faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 77d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Constructs an empty transition set. Add child transitions to the 78d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * set by calling {@link #addTransition(Transition)} )}. By default, 79d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * child transitions will play {@link #ORDERING_TOGETHER together}. 80faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 81d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet() { 82faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 83faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 84ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount public TransitionSet(Context context, AttributeSet attrs) { 85ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount super(context, attrs); 86ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TransitionSet); 87ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount int ordering = a.getInt(R.styleable.TransitionSet_transitionOrdering, 88ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount TransitionSet.ORDERING_TOGETHER); 89ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount setOrdering(ordering); 90ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount a.recycle(); 91ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount } 92ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 93faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 94d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Sets the play order of this set's child transitions. 95faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 96d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @param ordering {@link #ORDERING_TOGETHER} to play this set's child 97d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * transitions together, {@link #ORDERING_SEQUENTIAL} to play the child 98faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transitions in sequence. 99d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 100faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 101d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setOrdering(int ordering) { 102faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase switch (ordering) { 103d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase case ORDERING_SEQUENTIAL: 104faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mPlayTogether = false; 105faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase break; 106d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase case ORDERING_TOGETHER: 107faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mPlayTogether = true; 108faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase break; 109faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase default: 110d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase throw new AndroidRuntimeException("Invalid parameter for TransitionSet " + 111faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase "ordering: " + ordering); 112faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 113d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 114faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 115faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 116faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 117d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Returns the ordering of this TransitionSet. By default, the value is 118d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * {@link #ORDERING_TOGETHER}. 119d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 120d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return {@link #ORDERING_TOGETHER} if child transitions will play at the same 121d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * time, {@link #ORDERING_SEQUENTIAL} if they will play in sequence. 122faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 123d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @see #setOrdering(int) 124faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 125d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public int getOrdering() { 126d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return mPlayTogether ? ORDERING_TOGETHER : ORDERING_SEQUENTIAL; 127d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 128d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 129d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase /** 130d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Adds child transition to this set. The order in which this child transition 131d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * is added relative to other child transitions that are added, in addition to 132d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * the {@link #getOrdering() ordering} property, determines the 133d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * order in which the transitions are started. 134d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 135d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * <p>If this transitionSet has a {@link #getDuration() duration} set on it, the 136d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * child transition will inherit that duration. Transitions are assumed to have 137d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * a maximum of one transitionSet parent.</p> 138d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 139d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @param transition A non-null child transition to be added to this set. 140d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 141d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase */ 142d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addTransition(Transition transition) { 143d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (transition != null) { 144d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitions.add(transition); 145d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transition.mParent = this; 146d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (mDuration >= 0) { 147d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transition.setDuration(mDuration); 148faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 149faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 150d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 151faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 152faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 153faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 154d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Setting a non-negative duration on a TransitionSet causes all of the child 155867a86613d4152a93423300f83597300e6ebeebeChet Haase * transitions (current and future) to inherit this duration. 156867a86613d4152a93423300f83597300e6ebeebeChet Haase * 157867a86613d4152a93423300f83597300e6ebeebeChet Haase * @param duration The length of the animation, in milliseconds. 158d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 159867a86613d4152a93423300f83597300e6ebeebeChet Haase */ 160867a86613d4152a93423300f83597300e6ebeebeChet Haase @Override 161d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setDuration(long duration) { 162867a86613d4152a93423300f83597300e6ebeebeChet Haase super.setDuration(duration); 163867a86613d4152a93423300f83597300e6ebeebeChet Haase if (mDuration >= 0) { 164867a86613d4152a93423300f83597300e6ebeebeChet Haase int numTransitions = mTransitions.size(); 165867a86613d4152a93423300f83597300e6ebeebeChet Haase for (int i = 0; i < numTransitions; ++i) { 166867a86613d4152a93423300f83597300e6ebeebeChet Haase mTransitions.get(i).setDuration(duration); 167867a86613d4152a93423300f83597300e6ebeebeChet Haase } 168867a86613d4152a93423300f83597300e6ebeebeChet Haase } 169867a86613d4152a93423300f83597300e6ebeebeChet Haase return this; 170867a86613d4152a93423300f83597300e6ebeebeChet Haase } 171867a86613d4152a93423300f83597300e6ebeebeChet Haase 172d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 173d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setStartDelay(long startDelay) { 174d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.setStartDelay(startDelay); 175d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 176d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 177d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 178d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setInterpolator(TimeInterpolator interpolator) { 179d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.setInterpolator(interpolator); 180d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 181d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 182d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 183d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addTarget(View target) { 184d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 185d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(target); 186d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 187d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.addTarget(target); 188d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 189d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 190d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 191ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase public TransitionSet addTarget(int targetId) { 192d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 193d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetId); 194d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 195ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase return (TransitionSet) super.addTarget(targetId); 196d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 197d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 198d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 199d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet addTarget(String targetName) { 200d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 201d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetName); 202d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 203d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.addTarget(targetName); 204d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 205d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 206d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 207d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet addTarget(Class targetType) { 208d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 209d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetType); 210d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 211d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.addTarget(targetType); 212d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 213d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 214d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 215d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addListener(TransitionListener listener) { 216d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.addListener(listener); 217d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 218d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 219d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 220ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase public TransitionSet removeTarget(int targetId) { 221d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 222d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(targetId); 223d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 224ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase return (TransitionSet) super.removeTarget(targetId); 225d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 226d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 227d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 228d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeTarget(View target) { 229d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 230d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 231d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 232d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.removeTarget(target); 233d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 234d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 235d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 236d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet removeTarget(Class target) { 237d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 238d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 239d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 240d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.removeTarget(target); 241d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 242d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 243d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 244d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet removeTarget(String target) { 245d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 246d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 247d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 248d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.removeTarget(target); 249d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 250d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 251d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 252d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(View target, boolean exclude) { 253d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 254d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(target, exclude); 255d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 256d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(target, exclude); 257d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 258d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 259d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 2600a2ae002e60f7ea9b6bea282086b5eb0ae3c6e51George Mount public Transition excludeTarget(String targetName, boolean exclude) { 261d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 2620a2ae002e60f7ea9b6bea282086b5eb0ae3c6e51George Mount mTransitions.get(i).excludeTarget(targetName, exclude); 263d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 2640a2ae002e60f7ea9b6bea282086b5eb0ae3c6e51George Mount return super.excludeTarget(targetName, exclude); 265d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 266d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 267d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 268d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(int targetId, boolean exclude) { 269d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 270d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(targetId, exclude); 271d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 272d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(targetId, exclude); 273d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 274d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 275d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 276d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(Class type, boolean exclude) { 277d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 278d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(type, exclude); 279d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 280d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(type, exclude); 281d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 282d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 283d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 284d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeListener(TransitionListener listener) { 285d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.removeListener(listener); 286d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 287d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 288ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount @Override 289ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount public void setPathMotion(PathMotion pathMotion) { 290ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount super.setPathMotion(pathMotion); 291ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount for (int i = 0; i < mTransitions.size(); i++) { 292ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount mTransitions.get(i).setPathMotion(pathMotion); 293ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount } 294ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount } 295ecd857be3946283ebb4306e2c03ae70f5c5bb152George Mount 296867a86613d4152a93423300f83597300e6ebeebeChet Haase /** 297d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Removes the specified child transition from this set. 298faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 299faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @param transition The transition to be removed. 300d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 301faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 302d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeTransition(Transition transition) { 303faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mTransitions.remove(transition); 3046ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase transition.mParent = null; 305d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 306faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 307faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 308faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 309faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Sets up listeners for each of the child transitions. This is used to 310d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * determine when this transition set is finished (all child transitions 311faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * must finish first). 312faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 313faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private void setupStartEndListeners() { 314d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSetListener listener = new TransitionSetListener(this); 315faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (Transition childTransition : mTransitions) { 3166ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase childTransition.addListener(listener); 317faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 318faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mCurrentListeners = mTransitions.size(); 319faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 320faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 321faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 322faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * This listener is used to detect when all child transitions are done, at 323d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * which point this transition set is also done. 324faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 325d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase static class TransitionSetListener extends TransitionListenerAdapter { 326d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet mTransitionSet; 327d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSetListener(TransitionSet transitionSet) { 328d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet = transitionSet; 3296ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 330faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 331faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionStart(Transition transition) { 332d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (!mTransitionSet.mStarted) { 333d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.start(); 334d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.mStarted = true; 335faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 336faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 337faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 338faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 339faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionEnd(Transition transition) { 340d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase --mTransitionSet.mCurrentListeners; 341d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (mTransitionSet.mCurrentListeners == 0) { 342faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // All child trans 343d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.mStarted = false; 344d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.end(); 345faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 346faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase transition.removeListener(this); 347faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 3486ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 349faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 350faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 351faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @hide 352faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 353faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 354d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase protected void createAnimators(ViewGroup sceneRoot, TransitionValuesMaps startValues, 3556ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase TransitionValuesMaps endValues) { 3568c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount startValues = removeExcludes(startValues); 3578c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount endValues = removeExcludes(endValues); 358faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (Transition childTransition : mTransitions) { 359d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase childTransition.createAnimators(sceneRoot, startValues, endValues); 360faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 361faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 362faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 3638c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount private TransitionValuesMaps removeExcludes(TransitionValuesMaps values) { 3648c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount if (mTargetIds.isEmpty() && mTargetIdExcludes == null && mTargetTypeExcludes == null 3658c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount && mTargets.isEmpty()) { 3668c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount return values; 3678c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3688c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount TransitionValuesMaps included = new TransitionValuesMaps(); 3698c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount int numValues = values.viewValues.size(); 3708c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount for (int i = 0; i < numValues; i++) { 3718c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount View view = values.viewValues.keyAt(i); 37230da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(view)) { 37330da61d477bcb6cc7718f9516c444359352fe148George Mount addViewValues(included, view, values.viewValues.valueAt(i)); 3748c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3758c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3768c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount return included; 3778c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3788c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount 379faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 380faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @hide 381faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 382faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 383d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase protected void runAnimators() { 384faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase setupStartEndListeners(); 385faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (!mPlayTogether) { 386faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // Setup sequence with listeners 387faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // TODO: Need to add listeners in such a way that we can remove them later if canceled 388faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (int i = 1; i < mTransitions.size(); ++i) { 389faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Transition previousTransition = mTransitions.get(i - 1); 390faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase final Transition nextTransition = mTransitions.get(i); 391faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase previousTransition.addListener(new TransitionListenerAdapter() { 392faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 393faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionEnd(Transition transition) { 394d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase nextTransition.runAnimators(); 395faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase transition.removeListener(this); 396faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 397faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase }); 398faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 399faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Transition firstTransition = mTransitions.get(0); 400faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (firstTransition != null) { 401d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase firstTransition.runAnimators(); 402faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 403faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } else { 404faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (Transition childTransition : mTransitions) { 405d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase childTransition.runAnimators(); 406faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 407faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 408faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 409faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 410faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 411d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureStartValues(TransitionValues transitionValues) { 41230da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(transitionValues.view)) { 413ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase for (Transition childTransition : mTransitions) { 41430da61d477bcb6cc7718f9516c444359352fe148George Mount if (childTransition.isValidTarget(transitionValues.view)) { 415ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase childTransition.captureStartValues(transitionValues); 416ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase } 417d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 418d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 419d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 420d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 421d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 422d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureEndValues(TransitionValues transitionValues) { 42330da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(transitionValues.view)) { 424ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase for (Transition childTransition : mTransitions) { 42530da61d477bcb6cc7718f9516c444359352fe148George Mount if (childTransition.isValidTarget(transitionValues.view)) { 426ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase childTransition.captureEndValues(transitionValues); 427ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase } 428faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 429faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 430faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 431faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 432d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 433d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount void capturePropagationValues(TransitionValues transitionValues) { 434d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.capturePropagationValues(transitionValues); 435d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 436d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 437d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).capturePropagationValues(transitionValues); 438d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 439d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 440d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 441199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase /** @hide */ 442faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 443cf68aad3164303df59b2a669d186a94533c9c743George Mount public void pause(View sceneRoot) { 444cf68aad3164303df59b2a669d186a94533c9c743George Mount super.pause(sceneRoot); 445e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase int numTransitions = mTransitions.size(); 446e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase for (int i = 0; i < numTransitions; ++i) { 447cf68aad3164303df59b2a669d186a94533c9c743George Mount mTransitions.get(i).pause(sceneRoot); 448199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 449199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 450199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase 451199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase /** @hide */ 452199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase @Override 453cf68aad3164303df59b2a669d186a94533c9c743George Mount public void resume(View sceneRoot) { 454cf68aad3164303df59b2a669d186a94533c9c743George Mount super.resume(sceneRoot); 455199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase int numTransitions = mTransitions.size(); 456199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase for (int i = 0; i < numTransitions; ++i) { 457cf68aad3164303df59b2a669d186a94533c9c743George Mount mTransitions.get(i).resume(sceneRoot); 458199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 459199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 460199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase 461d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase /** @hide */ 462199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase @Override 463199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase protected void cancel() { 464199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase super.cancel(); 465199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase int numTransitions = mTransitions.size(); 466199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase for (int i = 0; i < numTransitions; ++i) { 467199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase mTransitions.get(i).cancel(); 468e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase } 469e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase } 470e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase 471e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase @Override 472d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet setSceneRoot(ViewGroup sceneRoot) { 4736ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase super.setSceneRoot(sceneRoot); 4746ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase int numTransitions = mTransitions.size(); 4756ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase for (int i = 0; i < numTransitions; ++i) { 4766ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase mTransitions.get(i).setSceneRoot(sceneRoot); 4776ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 478d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) this; 4796ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 4806ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase 4816ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase @Override 482b7a7fc9d233bad507ce893882352618b13647058Chet Haase void setCanRemoveViews(boolean canRemoveViews) { 483b7a7fc9d233bad507ce893882352618b13647058Chet Haase super.setCanRemoveViews(canRemoveViews); 484b7a7fc9d233bad507ce893882352618b13647058Chet Haase int numTransitions = mTransitions.size(); 485b7a7fc9d233bad507ce893882352618b13647058Chet Haase for (int i = 0; i < numTransitions; ++i) { 486b7a7fc9d233bad507ce893882352618b13647058Chet Haase mTransitions.get(i).setCanRemoveViews(canRemoveViews); 487b7a7fc9d233bad507ce893882352618b13647058Chet Haase } 488b7a7fc9d233bad507ce893882352618b13647058Chet Haase } 489b7a7fc9d233bad507ce893882352618b13647058Chet Haase 490b7a7fc9d233bad507ce893882352618b13647058Chet Haase @Override 491d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount public void setPropagation(TransitionPropagation propagation) { 492d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.setPropagation(propagation); 493d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 494d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 495d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).setPropagation(propagation); 496d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 497d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 498d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 499d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 500d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount public void setEpicenterCallback(EpicenterCallback epicenterCallback) { 501d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.setEpicenterCallback(epicenterCallback); 502d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 503d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 504d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).setEpicenterCallback(epicenterCallback); 505d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 506d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 507d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 508d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 509faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase String toString(String indent) { 510faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase String result = super.toString(indent); 511faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (int i = 0; i < mTransitions.size(); ++i) { 512faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase result += "\n" + mTransitions.get(i).toString(indent + " "); 513faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 514faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase return result; 515faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 516faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 5176ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase @Override 518d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet clone() { 519d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet clone = (TransitionSet) super.clone(); 5206ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase clone.mTransitions = new ArrayList<Transition>(); 5216ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase int numTransitions = mTransitions.size(); 5226ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase for (int i = 0; i < numTransitions; ++i) { 523c46181a963be736186ae29101625a05b5c1f0ba8Chet Haase clone.addTransition((Transition) mTransitions.get(i).clone()); 5246ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 5256ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase return clone; 5266ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 527faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase} 528