summaryrefslogtreecommitdiffstats
path: root/core/java/android/transition/Transition.java
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2014-04-24 08:57:03 -0700
committerGeorge Mount <mount@google.com>2014-04-29 13:08:39 -0700
commita98fb7ab6a17d27395cf2c8e86060af49b861be6 (patch)
tree8d28d14b53f1d245855081dc7dd2fd3da0efd7dd /core/java/android/transition/Transition.java
parentcaa03107d4322b0e30f92e6dc1eb1ea73b1bf747 (diff)
downloadframeworks_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.java54
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;