| /* |
| * 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; |
| import android.animation.TypeEvaluator; |
| import android.graphics.Matrix; |
| |
| /** |
| * 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; |
| } |
| } |
| |
| public static Transition mergeTransitions(Transition... transitions) { |
| int count = 0; |
| int nonNullIndex = -1; |
| for (int i = 0; i < transitions.length; i++) { |
| if (transitions[i] != null) { |
| count++; |
| nonNullIndex = i; |
| } |
| } |
| |
| if (count == 0) { |
| return null; |
| } |
| |
| if (count == 1) { |
| return transitions[nonNullIndex]; |
| } |
| |
| TransitionSet transitionSet = new TransitionSet(); |
| for (int i = 0; i < transitions.length; i++) { |
| if (transitions[i] != null) { |
| transitionSet.addTransition(transitions[i]); |
| } |
| } |
| return transitionSet; |
| } |
| |
| public static class MatrixEvaluator implements TypeEvaluator<Matrix> { |
| |
| float[] mTempStartValues = new float[9]; |
| |
| float[] mTempEndValues = new float[9]; |
| |
| Matrix mTempMatrix = new Matrix(); |
| |
| @Override |
| public Matrix evaluate(float fraction, Matrix startValue, Matrix endValue) { |
| startValue.getValues(mTempStartValues); |
| endValue.getValues(mTempEndValues); |
| for (int i = 0; i < 9; i++) { |
| float diff = mTempEndValues[i] - mTempStartValues[i]; |
| mTempEndValues[i] = mTempStartValues[i] + (fraction * diff); |
| } |
| mTempMatrix.setValues(mTempEndValues); |
| return mTempMatrix; |
| } |
| } |
| } |