package com.jakewharton.u2020.ui.transform;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import com.squareup.picasso.Transformation;
import static android.graphics.Bitmap.Config.ARGB_8888;
import static android.graphics.Paint.ANTI_ALIAS_FLAG;
import static android.graphics.Shader.TileMode.CLAMP;
public class CircleStrokeTransformation implements Transformation {
private final float strokeWidth;
private final Paint strokePaint;
private final int strokeColor;
public CircleStrokeTransformation(Context context, int strokeColor, int strokeWidthDp) {
this.strokeColor = strokeColor;
this.strokeWidth = strokeWidthDp * context.getResources().getDisplayMetrics().density;
strokePaint = new Paint(ANTI_ALIAS_FLAG);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setColor(strokeColor);
}
@Override public Bitmap transform(Bitmap bitmap) {
int size = bitmap.getWidth();
Bitmap rounded = Bitmap.createBitmap(size, size, ARGB_8888);
Canvas canvas = new Canvas(rounded);
BitmapShader shader = new BitmapShader(bitmap, CLAMP, CLAMP);
Paint shaderPaint = new Paint(ANTI_ALIAS_FLAG);
shaderPaint.setShader(shader);
RectF rect = new RectF(0, 0, size, size);
float radius = size / 2f;
canvas.drawRoundRect(rect, radius, radius, shaderPaint);
strokePaint.setStrokeWidth(strokeWidth);
float strokeInset = strokeWidth / 2f;
rect.inset(strokeInset, strokeInset);
float strokeRadius = radius - strokeInset;
canvas.drawRoundRect(rect, strokeRadius, strokeRadius, strokePaint);
bitmap.recycle();
return rounded;
}
@Override public String key() {
return "circle_stroke(" + strokeColor + "," + strokeWidth + ")";
}
}