package com.linfaxin.transitionplayer.transitions; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.transitions.everywhere.Transition; import android.transitions.everywhere.TransitionValues; import android.view.View; import android.view.ViewGroup; /** * Created by linfaxin on 2015/5/29. * Email: linlinfaxin@163.com */ public class ChangeScale extends Transition { private static final String PROPNAME_NAME1 = "android:scale:scalex"; private static final String PROPNAME_NAME2 = "android:scale:scaley"; private static final String FIELD_NAME1 = "scaleX"; private static final String FIELD_NAME2 = "scaleY"; @Override public void captureStartValues(TransitionValues transitionValues) { transitionValues.values.put(PROPNAME_NAME1, transitionValues.view.getScaleX()); transitionValues.values.put(PROPNAME_NAME2, transitionValues.view.getScaleY()); } @Override public void captureEndValues(TransitionValues transitionValues) { transitionValues.values.put(PROPNAME_NAME1, transitionValues.view.getScaleX()); transitionValues.values.put(PROPNAME_NAME2, transitionValues.view.getScaleY()); } @Override public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) { if (startValues == null || endValues == null) { return null; } final View view = endValues.view; float startValueX = (Float) startValues.values.get(PROPNAME_NAME1); float startValueY = (Float) startValues.values.get(PROPNAME_NAME2); float endValueX = (Float) endValues.values.get(PROPNAME_NAME1); float endValueY = (Float) endValues.values.get(PROPNAME_NAME2); AnimatorSet animatorSet = new AnimatorSet(); if (startValueX != endValueX) { view.setScaleX(startValueX); animatorSet.playTogether(ObjectAnimator.ofFloat(view, FIELD_NAME1, startValueX, endValueX)); } if (startValueY != endValueY) { view.setScaleY(startValueY); animatorSet.playTogether( ObjectAnimator.ofFloat(view, FIELD_NAME2, startValueY, endValueY)); } if(animatorSet.getChildAnimations()!=null && animatorSet.getChildAnimations().size()>0){ return animatorSet; } return null; } }