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;
}
}
@@ -726,6 +723,36 @@ public abstract class Transition implements Cloneable {
return this;
}
+ /**
+ * 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.
+ *
+ * Note that any View that can be cast to targetType will be included, so
+ * if targetType is View.class, all Views will be included.
+ *
+ * @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
+ * transitionSet.addTransitions(new Fade()).addTarget(ImageView.class);
+ */
+ public Transition addTarget(Class targetType) {
+ if (mTargetTypes == null) {
+ mTargetTypes = new ArrayList();
+ }
+ 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;
diff --git a/core/java/android/transition/TransitionInflater.java b/core/java/android/transition/TransitionInflater.java
index 2bdba81f5bf7e..a5e960aa4d9f2 100644
--- a/core/java/android/transition/TransitionInflater.java
+++ b/core/java/android/transition/TransitionInflater.java
@@ -231,22 +231,24 @@ public class TransitionInflater {
com.android.internal.R.styleable.TransitionTarget_targetId, -1);
if (id >= 0) {
transition.addTarget(id);
+ } else if ((id = a.getResourceId(
+ com.android.internal.R.styleable.TransitionTarget_excludeId, -1)) >= 0) {
+ transition.excludeTarget(id, true);
} else {
- id = a.getResourceId(
- com.android.internal.R.styleable.TransitionTarget_excludeId, -1);
- if (id >= 0) {
- transition.excludeTarget(id, true);
- } else {
- String className = a.getString(
- com.android.internal.R.styleable.TransitionTarget_excludeClass);
+ String className = a.getString(
+ com.android.internal.R.styleable.TransitionTarget_excludeClass);
+ try {
if (className != null) {
- try {
- Class clazz = Class.forName(className);
- transition.excludeTarget(clazz, true);
- } catch (ClassNotFoundException e) {
- throw new RuntimeException("Could not create " + className, e);
- }
+ Class clazz = Class.forName(className);
+ transition.excludeTarget(clazz, true);
+ } else if ((className = a.getString(
+ com.android.internal.R.styleable.TransitionTarget_targetClass))
+ != null) {
+ Class clazz = Class.forName(className);
+ transition.addTarget(clazz);
}
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("Could not create " + className, e);
}
}
} else {
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 0a3ca2a1bccea..efc1b55bf005b 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -5029,6 +5029,8 @@
+
+