Lorem ipsum dolor sit amet, consectetur adipiscing elit. Test link

BlurImageView in Android

BlurImageView in Android


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.LightingColorFilter;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.view.View;

public class BlurImageView extends View {
    private static final float BLUR_RADIUS = 25f;

    private Bitmap originalBitmap;
    private Bitmap blurredBitmap;
    private Paint paint;

    public BlurImageView(Context context, Bitmap bitmap) {
        super(context);

        originalBitmap = bitmap;
        paint = new Paint();
        paint.setAntiAlias(true);

        // Blur the bitmap
        blurredBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(blurredBitmap);
        canvas.drawBitmap(originalBitmap, 0, 0, paint);
        paint.setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));
        canvas.drawBitmap(blurredBitmap, 0, 0, paint);
        blurBitmap(blurredBitmap);

        // Set the blurred bitmap as the background of the view
        Drawable drawable = new BitmapDrawable(getResources(), blurredBitmap);
        setBackground(drawable);
    }

    private void blurBitmap(Bitmap bitmap) {
        Bitmap outputBitmap = Bitmap.createBitmap(bitmap);
        RenderScript rs = RenderScript.create(getContext());
        ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        Allocation tmpIn = Allocation.createFromBitmap(rs, bitmap);
        Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
        theIntrinsic.setRadius(BLUR_RADIUS);
        theIntrinsic.setInput(tmpIn);
        theIntrinsic.forEach(tmpOut);
        tmpOut.copyTo(outputBitmap);
        bitmap.recycle();
        rs.destroy();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // Draw the original bitmap on top of the blurred bitmap with a PorterDuffXfermode
        Rect rect = new Rect(0, 0, getWidth(), getHeight());
        RectF rectF = new RectF(rect);
        canvas.drawBitmap(originalBitmap, null, rect, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN));
        canvas.drawBitmap(blurredBitmap, null, rect, paint);
        paint.setXfermode(null);
    }
}

        

Post a Comment