package com.github.takahirom.materialelement.animation.transition; import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Rect; import android.transition.TransitionValues; import android.transition.Visibility; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; @SuppressWarnings("unused") public class BlinkVisibilityDebugTransition extends Visibility { private static final String PROP_BOUNDS = "mdap:fabTransform:bounds"; private static final String[] transitionProperties = { PROP_BOUNDS }; public BlinkVisibilityDebugTransition() { super(); } public BlinkVisibilityDebugTransition(Context context, AttributeSet attrs) { super(context, attrs); } @Override public String[] getTransitionProperties() { return transitionProperties; } @Override public void captureStartValues(TransitionValues transitionValues) { captureValues(transitionValues); } @Override public void captureEndValues(TransitionValues transitionValues) { captureValues(transitionValues); } private void captureValues(TransitionValues transitionValues) { final View view = transitionValues.view; if (view == null || view.getWidth() <= 0 || view.getHeight() <= 0) return; transitionValues.values.put(PROP_BOUNDS, new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom())); } @Override public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) { if (startValues == null || endValues == null) return null; final Rect startBounds = (Rect) startValues.values.get(PROP_BOUNDS); final Rect endBounds = (Rect) endValues.values.get(PROP_BOUNDS); final View view = endValues.view; ValueAnimator alphaAnim = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f); alphaAnim.setDuration(5); alphaAnim.setRepeatCount(ValueAnimator.INFINITE); alphaAnim.setRepeatMode(ValueAnimator.REVERSE); return alphaAnim; } }