TransitionSet.java revision d4c3c91dd0757eec9703ef90ea4c5a7ee99f18ca
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 19d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.animation.TimeInterpolator; 20d6107a3170df61d9e776fcd5666acfc9135c6f16George Mountimport android.graphics.Rect; 21faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.util.AndroidRuntimeException; 22d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haaseimport android.view.View; 23faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport android.view.ViewGroup; 24faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 25faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haaseimport java.util.ArrayList; 26faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 27faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase/** 28d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A TransitionSet is a parent of child transitions (including other 29d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * TransitionSets). Using TransitionSets enables more complex 30d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * choreography of transitions, where some sets play {@link #ORDERING_TOGETHER} and 31d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * others play {@link #ORDERING_SEQUENTIAL}. For example, {@link AutoTransition} 32d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * uses a TransitionSet to sequentially play a Fade(Fade.OUT), followed by 33d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * a {@link ChangeBounds}, followed by a Fade(Fade.OUT) transition. 34aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * 35aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <p>A TransitionSet can be described in a resource file by using the 36aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * tag <code>transitionSet</code>, along with the standard 37aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * attributes of {@link android.R.styleable#TransitionSet} and 38aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * {@link android.R.styleable#Transition}. Child transitions of the 39aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * TransitionSet object can be loaded by adding those child tags inside the 40aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * enclosing <code>transitionSet</code> tag. For example, the following xml 41aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * describes a TransitionSet that plays a Fade and then a ChangeBounds 42aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * transition on the affected view targets:</p> 43aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <pre> 44aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <transitionSet xmlns:android="http://schemas.android.com/apk/res/android" 45aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * android:ordering="sequential"> 46aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <fade/> 47aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * <changeBounds/> 48aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * </transitionSet> 49aafc91c05acfb2d5a95f46f27e1deb2dfaa15c32Chet Haase * </pre> 50faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 51d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haasepublic class TransitionSet extends Transition { 52faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 53faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase ArrayList<Transition> mTransitions = new ArrayList<Transition>(); 54faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private boolean mPlayTogether = true; 55faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase int mCurrentListeners; 56faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase boolean mStarted = false; 57faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 58faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 59d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A flag used to indicate that the child transitions of this set 60faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * should all start at the same time. 61faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 62d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public static final int ORDERING_TOGETHER = 0; 63faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 64d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * A flag used to indicate that the child transitions of this set should 65faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * play in sequence; when one child transition ends, the next child 66faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transition begins. Note that a transition does not end until all 67faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * instances of it (which are playing on all applicable targets of the 68faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transition) end. 69faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 70d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public static final int ORDERING_SEQUENTIAL = 1; 71faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 72faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 73d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Constructs an empty transition set. Add child transitions to the 74d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * set by calling {@link #addTransition(Transition)} )}. By default, 75d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * child transitions will play {@link #ORDERING_TOGETHER together}. 76faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 77d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet() { 78faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 79faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 80faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 81d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Sets the play order of this set's child transitions. 82faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 83d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @param ordering {@link #ORDERING_TOGETHER} to play this set's child 84d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * transitions together, {@link #ORDERING_SEQUENTIAL} to play the child 85faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * transitions in sequence. 86d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 87faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 88d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setOrdering(int ordering) { 89faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase switch (ordering) { 90d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase case ORDERING_SEQUENTIAL: 91faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mPlayTogether = false; 92faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase break; 93d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase case ORDERING_TOGETHER: 94faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mPlayTogether = true; 95faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase break; 96faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase default: 97d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase throw new AndroidRuntimeException("Invalid parameter for TransitionSet " + 98faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase "ordering: " + ordering); 99faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 100d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 101faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 102faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 103faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 104d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Returns the ordering of this TransitionSet. By default, the value is 105d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * {@link #ORDERING_TOGETHER}. 106d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 107d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return {@link #ORDERING_TOGETHER} if child transitions will play at the same 108d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * time, {@link #ORDERING_SEQUENTIAL} if they will play in sequence. 109faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 110d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @see #setOrdering(int) 111faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 112d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public int getOrdering() { 113d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return mPlayTogether ? ORDERING_TOGETHER : ORDERING_SEQUENTIAL; 114d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 115d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 116d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase /** 117d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Adds child transition to this set. The order in which this child transition 118d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * is added relative to other child transitions that are added, in addition to 119d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * the {@link #getOrdering() ordering} property, determines the 120d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * order in which the transitions are started. 121d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 122d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * <p>If this transitionSet has a {@link #getDuration() duration} set on it, the 123d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * child transition will inherit that duration. Transitions are assumed to have 124d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * a maximum of one transitionSet parent.</p> 125d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * 126d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @param transition A non-null child transition to be added to this set. 127d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 128d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase */ 129d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addTransition(Transition transition) { 130d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (transition != null) { 131d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitions.add(transition); 132d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transition.mParent = this; 133d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (mDuration >= 0) { 134d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase transition.setDuration(mDuration); 135faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 136faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 137d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 138faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 139faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 140faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 141d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Setting a non-negative duration on a TransitionSet causes all of the child 142867a86613d4152a93423300f83597300e6ebeebeChet Haase * transitions (current and future) to inherit this duration. 143867a86613d4152a93423300f83597300e6ebeebeChet Haase * 144867a86613d4152a93423300f83597300e6ebeebeChet Haase * @param duration The length of the animation, in milliseconds. 145d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 146867a86613d4152a93423300f83597300e6ebeebeChet Haase */ 147867a86613d4152a93423300f83597300e6ebeebeChet Haase @Override 148d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setDuration(long duration) { 149867a86613d4152a93423300f83597300e6ebeebeChet Haase super.setDuration(duration); 150867a86613d4152a93423300f83597300e6ebeebeChet Haase if (mDuration >= 0) { 151867a86613d4152a93423300f83597300e6ebeebeChet Haase int numTransitions = mTransitions.size(); 152867a86613d4152a93423300f83597300e6ebeebeChet Haase for (int i = 0; i < numTransitions; ++i) { 153867a86613d4152a93423300f83597300e6ebeebeChet Haase mTransitions.get(i).setDuration(duration); 154867a86613d4152a93423300f83597300e6ebeebeChet Haase } 155867a86613d4152a93423300f83597300e6ebeebeChet Haase } 156867a86613d4152a93423300f83597300e6ebeebeChet Haase return this; 157867a86613d4152a93423300f83597300e6ebeebeChet Haase } 158867a86613d4152a93423300f83597300e6ebeebeChet Haase 159d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 160d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setStartDelay(long startDelay) { 161d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.setStartDelay(startDelay); 162d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 163d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 164d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 165d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet setInterpolator(TimeInterpolator interpolator) { 166d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.setInterpolator(interpolator); 167d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 168d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 169d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 170d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addTarget(View target) { 171d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 172d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(target); 173d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 174d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.addTarget(target); 175d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 176d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 177d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 178ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase public TransitionSet addTarget(int targetId) { 179d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 180d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetId); 181d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 182ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase return (TransitionSet) super.addTarget(targetId); 183d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 184d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 185d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 186d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet addTarget(String targetName) { 187d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 188d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetName); 189d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 190d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.addTarget(targetName); 191d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 192d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 193d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 194d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet addTarget(Class targetType) { 195d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 196d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).addTarget(targetType); 197d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 198d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.addTarget(targetType); 199d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 200d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 201d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 202d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet addListener(TransitionListener listener) { 203d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.addListener(listener); 204d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 205d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 206d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 207ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase public TransitionSet removeTarget(int targetId) { 208d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 209d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(targetId); 210d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 211ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase return (TransitionSet) super.removeTarget(targetId); 212d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 213d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 214d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 215d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeTarget(View target) { 216d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 217d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 218d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 219d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.removeTarget(target); 220d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 221d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 222d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 223d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet removeTarget(Class target) { 224d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 225d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 226d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 227d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return (TransitionSet) super.removeTarget(target); 228d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 229d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 230d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 231d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public TransitionSet removeTarget(String target) { 232d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 233d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).removeTarget(target); 234d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 235d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.removeTarget(target); 236d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 237d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 238d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 239d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(View target, boolean exclude) { 240d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 241d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(target, exclude); 242d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 243d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(target, exclude); 244d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 245d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 246d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 247d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(String targetViewName, boolean exclude) { 248d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 249d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(targetViewName, exclude); 250d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 251d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(targetViewName, exclude); 252d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 253d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 254d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 255d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(int targetId, boolean exclude) { 256d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 257d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(targetId, exclude); 258d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 259d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(targetId, exclude); 260d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 261d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 262d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 263d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount public Transition excludeTarget(Class type, boolean exclude) { 264d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount for (int i = 0; i < mTransitions.size(); i++) { 265d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount mTransitions.get(i).excludeTarget(type, exclude); 266d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 267d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount return super.excludeTarget(type, exclude); 268d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount } 269d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount 270d4c3c91dd0757eec9703ef90ea4c5a7ee99f18caGeorge Mount @Override 271d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeListener(TransitionListener listener) { 272d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) super.removeListener(listener); 273d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 274d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 275867a86613d4152a93423300f83597300e6ebeebeChet Haase /** 276d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * Removes the specified child transition from this set. 277faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * 278faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @param transition The transition to be removed. 279d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * @return This transitionSet object. 280faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 281d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet removeTransition(Transition transition) { 282faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mTransitions.remove(transition); 2836ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase transition.mParent = null; 284d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return this; 285faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 286faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 287faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 288faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * Sets up listeners for each of the child transitions. This is used to 289d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * determine when this transition set is finished (all child transitions 290faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * must finish first). 291faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 292faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase private void setupStartEndListeners() { 293d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSetListener listener = new TransitionSetListener(this); 294faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (Transition childTransition : mTransitions) { 2956ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase childTransition.addListener(listener); 296faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 297faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase mCurrentListeners = mTransitions.size(); 298faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 299faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 300faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 301faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * This listener is used to detect when all child transitions are done, at 302d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase * which point this transition set is also done. 303faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 304d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase static class TransitionSetListener extends TransitionListenerAdapter { 305d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet mTransitionSet; 306d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSetListener(TransitionSet transitionSet) { 307d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet = transitionSet; 3086ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 309faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 310faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionStart(Transition transition) { 311d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (!mTransitionSet.mStarted) { 312d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.start(); 313d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.mStarted = true; 314faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 315faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 316faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 317faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 318faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionEnd(Transition transition) { 319d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase --mTransitionSet.mCurrentListeners; 320d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase if (mTransitionSet.mCurrentListeners == 0) { 321faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // All child trans 322d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.mStarted = false; 323d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase mTransitionSet.end(); 324faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 325faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase transition.removeListener(this); 326faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 3276ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 328faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 329faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 330faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @hide 331faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 332faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 333d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase protected void createAnimators(ViewGroup sceneRoot, TransitionValuesMaps startValues, 3346ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase TransitionValuesMaps endValues) { 3358c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount startValues = removeExcludes(startValues); 3368c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount endValues = removeExcludes(endValues); 337faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (Transition childTransition : mTransitions) { 338d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase childTransition.createAnimators(sceneRoot, startValues, endValues); 339faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 340faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 341faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 3428c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount private TransitionValuesMaps removeExcludes(TransitionValuesMaps values) { 3438c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount if (mTargetIds.isEmpty() && mTargetIdExcludes == null && mTargetTypeExcludes == null 3448c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount && mTargets.isEmpty()) { 3458c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount return values; 3468c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3478c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount TransitionValuesMaps included = new TransitionValuesMaps(); 3488c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount int numValues = values.viewValues.size(); 3498c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount for (int i = 0; i < numValues; i++) { 3508c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount View view = values.viewValues.keyAt(i); 35130da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(view)) { 35230da61d477bcb6cc7718f9516c444359352fe148George Mount addViewValues(included, view, values.viewValues.valueAt(i)); 3538c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3548c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3558c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount return included; 3568c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount } 3578c0ceb34c3de5153dad162be719e2933c56886aeGeorge Mount 358faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase /** 359faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase * @hide 360faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase */ 361faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 362d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase protected void runAnimators() { 363faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase setupStartEndListeners(); 364faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (!mPlayTogether) { 365faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // Setup sequence with listeners 366faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase // TODO: Need to add listeners in such a way that we can remove them later if canceled 367faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (int i = 1; i < mTransitions.size(); ++i) { 368faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Transition previousTransition = mTransitions.get(i - 1); 369faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase final Transition nextTransition = mTransitions.get(i); 370faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase previousTransition.addListener(new TransitionListenerAdapter() { 371faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 372faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase public void onTransitionEnd(Transition transition) { 373d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase nextTransition.runAnimators(); 374faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase transition.removeListener(this); 375faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 376faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase }); 377faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 378faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase Transition firstTransition = mTransitions.get(0); 379faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase if (firstTransition != null) { 380d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase firstTransition.runAnimators(); 381faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 382faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } else { 383faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (Transition childTransition : mTransitions) { 384d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase childTransition.runAnimators(); 385faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 386faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 387faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 388faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 389faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 390d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureStartValues(TransitionValues transitionValues) { 39130da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(transitionValues.view)) { 392ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase for (Transition childTransition : mTransitions) { 39330da61d477bcb6cc7718f9516c444359352fe148George Mount if (childTransition.isValidTarget(transitionValues.view)) { 394ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase childTransition.captureStartValues(transitionValues); 395ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase } 396d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 397d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 398d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase } 399d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase 400d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase @Override 401d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public void captureEndValues(TransitionValues transitionValues) { 40230da61d477bcb6cc7718f9516c444359352fe148George Mount if (isValidTarget(transitionValues.view)) { 403ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase for (Transition childTransition : mTransitions) { 40430da61d477bcb6cc7718f9516c444359352fe148George Mount if (childTransition.isValidTarget(transitionValues.view)) { 405ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase childTransition.captureEndValues(transitionValues); 406ff58f92a0a77ad849ba714b5adac96790eca0048Chet Haase } 407faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 408faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 409faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 410faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 411d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 412d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount void capturePropagationValues(TransitionValues transitionValues) { 413d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.capturePropagationValues(transitionValues); 414d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 415d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 416d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).capturePropagationValues(transitionValues); 417d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 418d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 419d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 420199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase /** @hide */ 421faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase @Override 422cf68aad3164303df59b2a669d186a94533c9c743George Mount public void pause(View sceneRoot) { 423cf68aad3164303df59b2a669d186a94533c9c743George Mount super.pause(sceneRoot); 424e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase int numTransitions = mTransitions.size(); 425e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase for (int i = 0; i < numTransitions; ++i) { 426cf68aad3164303df59b2a669d186a94533c9c743George Mount mTransitions.get(i).pause(sceneRoot); 427199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 428199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 429199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase 430199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase /** @hide */ 431199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase @Override 432cf68aad3164303df59b2a669d186a94533c9c743George Mount public void resume(View sceneRoot) { 433cf68aad3164303df59b2a669d186a94533c9c743George Mount super.resume(sceneRoot); 434199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase int numTransitions = mTransitions.size(); 435199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase for (int i = 0; i < numTransitions; ++i) { 436cf68aad3164303df59b2a669d186a94533c9c743George Mount mTransitions.get(i).resume(sceneRoot); 437199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 438199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase } 439199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase 440d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase /** @hide */ 441199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase @Override 442199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase protected void cancel() { 443199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase super.cancel(); 444199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase int numTransitions = mTransitions.size(); 445199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase for (int i = 0; i < numTransitions; ++i) { 446199acdfcc98e852975dd7edfbcb822ba5e73146fChet Haase mTransitions.get(i).cancel(); 447e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase } 448e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase } 449e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase 450e9d32ea13ee14fc0eb4e45ca627ca77729d38bfeChet Haase @Override 451d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet setSceneRoot(ViewGroup sceneRoot) { 4526ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase super.setSceneRoot(sceneRoot); 4536ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase int numTransitions = mTransitions.size(); 4546ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase for (int i = 0; i < numTransitions; ++i) { 4556ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase mTransitions.get(i).setSceneRoot(sceneRoot); 4566ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 457d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase return (TransitionSet) this; 4586ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 4596ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase 4606ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase @Override 461b7a7fc9d233bad507ce893882352618b13647058Chet Haase void setCanRemoveViews(boolean canRemoveViews) { 462b7a7fc9d233bad507ce893882352618b13647058Chet Haase super.setCanRemoveViews(canRemoveViews); 463b7a7fc9d233bad507ce893882352618b13647058Chet Haase int numTransitions = mTransitions.size(); 464b7a7fc9d233bad507ce893882352618b13647058Chet Haase for (int i = 0; i < numTransitions; ++i) { 465b7a7fc9d233bad507ce893882352618b13647058Chet Haase mTransitions.get(i).setCanRemoveViews(canRemoveViews); 466b7a7fc9d233bad507ce893882352618b13647058Chet Haase } 467b7a7fc9d233bad507ce893882352618b13647058Chet Haase } 468b7a7fc9d233bad507ce893882352618b13647058Chet Haase 469b7a7fc9d233bad507ce893882352618b13647058Chet Haase @Override 470d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount public void setPropagation(TransitionPropagation propagation) { 471d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.setPropagation(propagation); 472d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 473d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 474d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).setPropagation(propagation); 475d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 476d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 477d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 478d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 479d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount public void setEpicenterCallback(EpicenterCallback epicenterCallback) { 480d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount super.setEpicenterCallback(epicenterCallback); 481d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount int numTransitions = mTransitions.size(); 482d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount for (int i = 0; i < numTransitions; ++i) { 483d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount mTransitions.get(i).setEpicenterCallback(epicenterCallback); 484d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 485d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount } 486d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount 487d6107a3170df61d9e776fcd5666acfc9135c6f16George Mount @Override 488faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase String toString(String indent) { 489faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase String result = super.toString(indent); 490faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase for (int i = 0; i < mTransitions.size(); ++i) { 491faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase result += "\n" + mTransitions.get(i).toString(indent + " "); 492faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 493faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase return result; 494faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase } 495faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase 4966ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase @Override 497d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase public TransitionSet clone() { 498d82c8ac4db7091d2e976af4c89a1734465d20cd2Chet Haase TransitionSet clone = (TransitionSet) super.clone(); 4996ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase clone.mTransitions = new ArrayList<Transition>(); 5006ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase int numTransitions = mTransitions.size(); 5016ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase for (int i = 0; i < numTransitions; ++i) { 502c46181a963be736186ae29101625a05b5c1f0ba8Chet Haase clone.addTransition((Transition) mTransitions.get(i).clone()); 5036ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 5046ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase return clone; 5056ebe3de331efd00ba23bc4191d4a82cfa4c39160Chet Haase } 506faebd8f0795b7d275fb4e503533c8c0c4a9acc21Chet Haase} 507