bottomRightAnimator = ObjectAnimator.ofInt(view, "right", "bottom",
bottomRightPath);
}
- Animator anim = mergeAnimators(topLeftAnimator, bottomRightAnimator);
+ Animator anim = TransitionUtils.mergeAnimators(topLeftAnimator,
+ bottomRightAnimator);
if (view.getParent() instanceof ViewGroup) {
final ViewGroup parent = (ViewGroup) view.getParent();
parent.suppressLayout(true);
clipAnimator = ObjectAnimator.ofObject(view, "clipBounds", sRectEvaluator,
tempStartBounds, tempEndBounds);
}
- Animator anim = mergeAnimators(translationAnimator, clipAnimator);
+ Animator anim = TransitionUtils.mergeAnimators(translationAnimator,
+ clipAnimator);
if (view.getParent() instanceof ViewGroup) {
final ViewGroup parent = (ViewGroup) view.getParent();
parent.suppressLayout(true);
}
return null;
}
-
- private static Animator mergeAnimators(Animator animator1, Animator animator2) {
- if (animator1 == null) {
- return animator2;
- } else if (animator2 == null) {
- return animator1;
- } else {
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.playTogether(animator1, animator2);
- return animatorSet;
- }
- }
}
--- /dev/null
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.transition;
+
+import android.animation.Animator;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.transition.Transition;
+import android.transition.TransitionValues;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * This transition captures the scroll properties of targets before and after
+ * the scene change and animates any changes.
+ *
+ * @hide
+ */
+public class ChangeScroll extends Transition {
+
+ private static final String PROPNAME_SCROLL_X = "android:changeScroll:x";
+ private static final String PROPNAME_SCROLL_Y = "android:changeScroll:y";
+
+ public ChangeScroll() {}
+
+ public ChangeScroll(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void captureStartValues(TransitionValues transitionValues) {
+ captureValues(transitionValues);
+ }
+
+ @Override
+ public void captureEndValues(TransitionValues transitionValues) {
+ captureValues(transitionValues);
+ }
+
+ private void captureValues(TransitionValues transitionValues) {
+ transitionValues.values.put(PROPNAME_SCROLL_X, transitionValues.view.getScrollX());
+ transitionValues.values.put(PROPNAME_SCROLL_Y, transitionValues.view.getScrollY());
+ }
+
+ @Override
+ public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
+ TransitionValues endValues) {
+ if (startValues == null || endValues == null) {
+ return null;
+ }
+ final View view = endValues.view;
+ int startX = (Integer) startValues.values.get(PROPNAME_SCROLL_X);
+ int endX = (Integer) endValues.values.get(PROPNAME_SCROLL_X);
+ int startY = (Integer) startValues.values.get(PROPNAME_SCROLL_Y);
+ int endY = (Integer) endValues.values.get(PROPNAME_SCROLL_Y);
+ Animator scrollXAnimator = null;
+ Animator scrollYAnimator = null;
+ if (startX != endX) {
+ view.setScrollX(startX);
+ scrollXAnimator = ObjectAnimator.ofInt(view, "scrollX", startX, endX);
+ }
+ if (startY != endY) {
+ view.setScrollY(startY);
+ scrollYAnimator = ObjectAnimator.ofInt(view, "scrollY", startY, endY);
+ }
+ return TransitionUtils.mergeAnimators(scrollXAnimator, scrollYAnimator);
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.transition;
+
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+
+/**
+ * Static utility methods for Transitions.
+ *
+ * @hide
+ */
+public class TransitionUtils {
+
+ static Animator mergeAnimators(Animator animator1, Animator animator2) {
+ if (animator1 == null) {
+ return animator2;
+ } else if (animator2 == null) {
+ return animator1;
+ } else {
+ AnimatorSet animatorSet = new AnimatorSet();
+ animatorSet.playTogether(animator1, animator2);
+ return animatorSet;
+ }
+ }
+}