package me.barrasso.android.volume.ui.transition; import android.annotation.TargetApi; import android.os.Build; import android.transition.ChangeBounds; import android.transition.ChangeText; import android.transition.Fade; import android.transition.Transition; import android.transition.TransitionManager; import android.transition.TransitionSet; import android.util.SparseArray; import android.view.ViewGroup; import me.barrasso.android.volume.ui.AcceleratedTransitionListener; @TargetApi(Build.VERSION_CODES.KITKAT) public class TransitionKitKat extends TransitionCompat { private final SparseArray<Transition> mTransitions = new SparseArray<Transition>(); public TransitionKitKat() { putTransition(KEY_AUDIO_TRANSITION, getAudioTransition()); } @Override public void beginDelayedTransition(ViewGroup sceneRoot) { TransitionManager.beginDelayedTransition(sceneRoot); } @Override public void beginDelayedTransition(ViewGroup sceneRoot, int key) { beginDelayedTransition(sceneRoot, mTransitions.get(key)); } @Override public void beginDelayedTransition(ViewGroup sceneRoot, Object transition) { if (transition instanceof Transition) { Transition trans = (Transition) transition; trans.addListener(AcceleratedTransitionListener.get()); TransitionManager.beginDelayedTransition(sceneRoot, trans); } } @Override public void putTransition(int key, Object value) { if (value instanceof Transition) { mTransitions.put(key, (Transition) value); } } private static final int TRANSITION_DURATION = 200; @Override public Object getAudioTransition() { final ChangeText tc = new ChangeText(); tc.setChangeBehavior(ChangeText.CHANGE_BEHAVIOR_OUT_IN); final TransitionSet inner = new TransitionSet(); inner.addTransition(tc).addTransition(new ChangeBounds()); final TransitionSet tg = new TransitionSet(); tg.addTransition(new Fade(Fade.OUT)).addTransition(inner). addTransition(new Fade(Fade.IN)); tg.setOrdering(TransitionSet.ORDERING_SEQUENTIAL); tg.setDuration(TRANSITION_DURATION); return tg; } }