diff options
author | George Mount <mount@google.com> | 2014-04-24 08:57:03 -0700 |
---|---|---|
committer | George Mount <mount@google.com> | 2014-04-29 13:08:39 -0700 |
commit | a98fb7ab6a17d27395cf2c8e86060af49b861be6 (patch) | |
tree | 8d28d14b53f1d245855081dc7dd2fd3da0efd7dd /core/java/android/transition/Transition.java | |
parent | caa03107d4322b0e30f92e6dc1eb1ea73b1bf747 (diff) | |
download | frameworks_base-a98fb7ab6a17d27395cf2c8e86060af49b861be6.zip frameworks_base-a98fb7ab6a17d27395cf2c8e86060af49b861be6.tar.gz frameworks_base-a98fb7ab6a17d27395cf2c8e86060af49b861be6.tar.bz2 |
Add mechanism for Transitions to target a class.
Bug 14289299
Added ability to target a specific class similarly to the
mechanism for excluding a specific class in Transitions.
Also changed XML tag from excludeTargetId to excludeId to
make it symmetric with excludeClass.
Change-Id: Ib371820ec75761243e75b659565b905b1b19c9a2
Diffstat (limited to 'core/java/android/transition/Transition.java')
-rw-r--r-- | core/java/android/transition/Transition.java | 54 |
1 files changed, 39 insertions, 15 deletions
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index b93312b..2549fde 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -88,8 +88,8 @@ import java.util.List; * transition uses a fadingMode of {@link Fade#OUT} instead of the default * out-in behavior. Finally, note the use of the <code>targets</code> sub-tag, which * takes a set of {@link android.R.styleable#TransitionTarget target} tags, each - * of which lists a specific <code>targetId</code>, <code>excludeId</code>, or - * <code>excludeClass</code>, which this transition acts upon. + * of which lists a specific <code>targetId</code>, <code>targetClass</code>, + * <code>excludeId</code>, or <code>excludeClass</code>, which this transition acts upon. * Use of targets is optional, but can be used to either limit the time spent checking * attributes on unchanging views, or limiting the types of animations run on specific views. * In this case, we know that only the <code>grayscaleContainer</code> will be @@ -116,6 +116,7 @@ public abstract class Transition implements Cloneable { ArrayList<Integer> mTargetIdExcludes = null; ArrayList<View> mTargetExcludes = null; ArrayList<Class> mTargetTypeExcludes = null; + ArrayList<Class> mTargetTypes = null; ArrayList<Integer> mTargetIdChildExcludes = null; ArrayList<View> mTargetChildExcludes = null; ArrayList<Class> mTargetTypeChildExcludes = null; @@ -569,19 +570,15 @@ public abstract class Transition implements Cloneable { } } } - if (mTargetIds.size() == 0 && mTargets.size() == 0) { + if (mTargetIds.size() == 0 && mTargets.size() == 0 && mTargetTypes == null) { return true; } - if (mTargetIds.size() > 0) { - for (int i = 0; i < mTargetIds.size(); ++i) { - if (mTargetIds.get(i) == targetId) { - return true; - } - } + if (mTargetIds.contains((int) targetId) || mTargets.contains(target)) { + return true; } - if (target != null && mTargets.size() > 0) { - for (int i = 0; i < mTargets.size(); ++i) { - if (mTargets.get(i) == target) { + if (mTargetTypes != null) { + for (int i = 0; i < mTargetTypes.size(); ++i) { + if (mTargetTypes.get(i).isInstance(target)) { return true; } } @@ -727,6 +724,36 @@ public abstract class Transition implements Cloneable { } /** + * Adds the Class of a target view that this Transition is interested in + * animating. By default, there are no targetTypes, and a Transition will + * listen for changes on every view in the hierarchy below the sceneRoot + * of the Scene being transitioned into. Setting targetTypes constrains + * the Transition to only listen for, and act on, views with these classes. + * Views with different classes will be ignored. + * + * <p>Note that any View that can be cast to targetType will be included, so + * if targetType is <code>View.class</code>, all Views will be included.</p> + * + * @see #addTarget(int) + * @see #addTarget(android.view.View) + * @see #excludeTarget(Class, boolean) + * @see #excludeChildren(Class, boolean) + * + * @param targetType The type to include when running this transition. + * @return The Transition to which the target class was added. + * Returning the same object makes it easier to chain calls during + * construction, such as + * <code>transitionSet.addTransitions(new Fade()).addTarget(ImageView.class);</code> + */ + public Transition addTarget(Class targetType) { + if (mTargetTypes == null) { + mTargetTypes = new ArrayList<Class>(); + } + mTargetTypes.add(targetType); + return this; + } + + /** * Removes the given targetId from the list of ids that this Transition * is interested in animating. * @@ -1116,9 +1143,6 @@ public abstract class Transition implements Cloneable { if (view == null) { return; } - if (!isValidTarget(view, view.getId())) { - return; - } boolean isListViewItem = false; if (view.getParent() instanceof ListView) { isListViewItem = true; |