Skip to content

Instantly share code, notes, and snippets.

@aprock
Created August 12, 2013 18:08

Revisions

  1. aprock created this gist Aug 12, 2013.
    43 changes: 43 additions & 0 deletions RoundedTransformation.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,43 @@
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.Config;
    import android.graphics.BitmapShader;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.graphics.RectF;
    import android.graphics.Shader;

    // enables hardware accelerated rounded corners
    // original idea here : http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/
    public class RoundedTransformation implements com.squareup.picasso.Transformation {
    private final int radius;
    private final int margin; // dp

    // radius is corner radii in dp
    // margin is the board in dp
    public RoundedTransformation(final int radius, final int margin) {
    this.radius = radius;
    this.margin = margin;
    }

    @Override
    public Bitmap transform(final Bitmap source) {
    final Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShader(new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));

    Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    canvas.drawRoundRect(new RectF(margin, margin, source.getWidth() - margin, source.getHeight() - margin), radius, radius, paint);

    if (source != output) {
    source.recycle();
    }

    return output;
    }

    @Override
    public String key() {
    return "rounded";
    }
    }