package com.wangdaye.mysplash.common.ui.transition; import android.animation.Animator; import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.TypedArray; import android.os.Build; import android.support.annotation.RequiresApi; import android.transition.Transition; import android.transition.TransitionValues; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import com.wangdaye.mysplash.R; /** * Lift off. * * This transition is used to change elevation of a target view. * * */ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public class LiftOff extends Transition { private static final String PROPNAME_ELEVATION = "mysplash:liftoff:elevation"; private static final String[] transitionProperties = { PROPNAME_ELEVATION }; private final float initialElevation; private final float finalElevation; public LiftOff(Context context, AttributeSet attrs) { super(context, attrs); final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LiftOff); initialElevation = a.getDimension(R.styleable.LiftOff_initElevation, 0f); finalElevation = a.getDimension(R.styleable.LiftOff_finalElevation, 0f); a.recycle(); } @Override public String[] getTransitionProperties() { return transitionProperties; } @Override public void captureStartValues(TransitionValues transitionValues) { transitionValues.values.put(PROPNAME_ELEVATION, initialElevation); } @Override public void captureEndValues(TransitionValues transitionValues) { transitionValues.values.put(PROPNAME_ELEVATION, finalElevation); } @Override public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) { return ObjectAnimator.ofFloat(endValues.view, View.TRANSLATION_Z, initialElevation, finalElevation); } }