package com.architjn.acjmusicplayer.utils;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.widget.ImageView;
/**
* Created by architjn on 12/12/15.
*/
public class ImageBlurAnimator {
private Context context;
private ImageView imgView;
private int animationScale;
private Bitmap newBitmap;
public ImageBlurAnimator(Context context, ImageView imgView, int animationScale, Bitmap newBitmap) {
this.context = context;
this.imgView = imgView;
this.animationScale = animationScale;
this.newBitmap = newBitmap;
}
public void animate() {
Bitmap bmp;
try {
bmp = ((BitmapDrawable) imgView.getDrawable()).getBitmap();
} catch (ClassCastException | NullPointerException e) {
imgView.setImageBitmap(newBitmap);
return;
}
Integer elevationFrom = 0;
Integer elevationTo = animationScale;
ValueAnimator colorAnimation =
ValueAnimator.ofObject(
new ArgbEvaluator(), elevationFrom, elevationTo);
final Bitmap finalBmp = bmp;
colorAnimation.addUpdateListener(
new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
try {
imgView.setImageBitmap(createBitmap_ScriptIntrinsicBlur(finalBmp,
(Integer) animator.getAnimatedValue()));
} catch (NullPointerException e) {
e.printStackTrace();
imgView.setImageBitmap(finalBmp);
}
}
});
colorAnimation.start();
Integer elevationFrom1 = animationScale;
Integer elevationTo1 = 0;
ValueAnimator colorAnimation1 =
ValueAnimator.ofObject(
new ArgbEvaluator(), elevationFrom1, elevationTo1);
colorAnimation1.addUpdateListener(
new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
try {
imgView.setImageBitmap(createBitmap_ScriptIntrinsicBlur(newBitmap,
(Integer) animator.getAnimatedValue()));
} catch (NullPointerException e) {
e.printStackTrace();
imgView.setImageBitmap(newBitmap);
}
}
});
colorAnimation1.start();
}
/*
Code below can be used for converting VectorDrawable to Bitmap
*/
// private Bitmap getBitmapOfVector(int id) {
// Utils utils = new Utils(context);
// Drawable vectorDrawable = context.getDrawable(id);
// int h = utils.dpToPx((int) context.getResources()
// .getDimension(R.dimen.parallax_img_height_player));
// int w = utils.getWindowWidth();
// if (vectorDrawable != null)
// vectorDrawable.setBounds(0, 0, w, h);
// Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
// Canvas canvas = new Canvas(bm);
// if (vectorDrawable != null)
// vectorDrawable.draw(canvas);
// return bm;
// }
private Bitmap createBitmap_ScriptIntrinsicBlur(Bitmap src, float r) {
//Radius range (0 < r <= 25)
if (r <= 0) {
r = 0.1f;
} else if (r > 25) {
r = 25.0f;
}
Bitmap bitmap = Bitmap.createBitmap(
src.getWidth(), src.getHeight(),
Bitmap.Config.ARGB_8888);
RenderScript renderScript = RenderScript.create(context);
Allocation blurInput = Allocation.createFromBitmap(renderScript, src);
Allocation blurOutput = Allocation.createFromBitmap(renderScript, bitmap);
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript,
Element.U8_4(renderScript));
blur.setInput(blurInput);
blur.setRadius(r);
blur.forEach(blurOutput);
blurOutput.copyTo(bitmap);
renderScript.destroy();
return bitmap;
}
}