Skip to content

Instantly share code, notes, and snippets.

@marsicdev
Created December 8, 2015 13:27
Show Gist options
  • Save marsicdev/b379491c77ab5f35539f to your computer and use it in GitHub Desktop.
Save marsicdev/b379491c77ab5f35539f to your computer and use it in GitHub Desktop.
Glide circular transform that doesn't throw java.lang.IllegalArgumentException: "Cannot draw recycled bitmaps" exception
public class CircleTransform extends BitmapTransformation {
public CircleTransform(Context context) {
super(context);
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap source, int outWidth, int outHeight) {
return ImageUtils.getCircularBitmapImage(pool, source);
}
@Override
public String getId() {
return "Glide_Circle_Transformation";
}
}
public class ImageUtils {
private ImageUtils() {
}
public static Bitmap getCircularBitmapImage(BitmapPool pool, Bitmap source) {
if (source == null) return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}
}
@Chyper00
Copy link

Chyper00 commented Dec 8, 2015

public void disposeBitmap(Bitmap bitmap) {
bitmap.recycle();
}

I holpe this help

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment