package com.github.miao1007.animewallpaper.utils.animation; import android.animation.ArgbEvaluator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.TransitionDrawable; import android.support.annotation.NonNull; import android.view.View; import android.widget.ImageView; /** * Created by leon on 4/18/15. */ public class AnimateUtils { private static final int ANIM_DORITION = 400; public static void animateViewColor(final View view, int toColor) { ColorDrawable colorDrawable = (ColorDrawable) view.getBackground(); int from = (colorDrawable == null) ? 0xffffff : colorDrawable.getColor(); ValueAnimator anim = new ValueAnimator(); anim.setIntValues(from, toColor); anim.setEvaluator(new ArgbEvaluator()); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { view.invalidate(); view.setBackgroundColor((Integer) valueAnimator.getAnimatedValue()); } }); anim.setDuration(ANIM_DORITION).start(); } public static void animateViewBitmap(@NonNull final ImageView root, Bitmap bitmap) { if (bitmap == null && root.getDrawable()!=null){ ObjectAnimator.ofFloat(root, View.ALPHA, 1f, 0f).setDuration(ANIM_DORITION).start(); return; } Drawable[] layers = new Drawable[2]; layers[0] = root.getDrawable(); layers[1] = new BitmapDrawable(root.getResources(), bitmap); if (layers[0] == null) {//if null then alpha root.setImageDrawable(layers[1]); ObjectAnimator.ofFloat(root, View.ALPHA, 0.0f, 1.0f).setDuration(ANIM_DORITION).start(); return; } TransitionDrawable transitionDrawable = new TransitionDrawable(layers); root.setImageDrawable(transitionDrawable); transitionDrawable.startTransition(ANIM_DORITION); } private static float scale; public static int dpToPixel(float dp, Context context) { if (scale == 0) { scale = context.getResources().getDisplayMetrics().density; } return (int) (dp * scale); } }