package com.squareup.picasso; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Shader; /** * Created by aspsine on 15/9/5. */ public class CircleTransformation implements Transformation { private static final int DEFAULT_BORDER_WIDTH = 10; private static final int DEFAULT_BORDER_COLOR = Color.parseColor("#000000"); int mBorderWidth = 0; int mBorderColor = 0; public CircleTransformation() { mBorderWidth = DEFAULT_BORDER_WIDTH; mBorderColor = DEFAULT_BORDER_COLOR; } public CircleTransformation(int borderWidth) { this.mBorderWidth = borderWidth; this.mBorderColor = DEFAULT_BORDER_COLOR; } public CircleTransformation(int borderWidth, int borderColor) { this.mBorderWidth = borderWidth; this.mBorderColor = borderColor; } @Override public Bitmap transform(Bitmap source) { int width = source.getWidth(); int height = source.getHeight(); int diameter = Math.min(width, height); int x = (width - diameter)/2; int y =(height - diameter)/2; Bitmap squareBitmap = Bitmap.createBitmap(source, x, y, diameter, diameter); if (squareBitmap != source) { source.recycle(); } Bitmap bitmap = Bitmap.createBitmap(diameter, diameter, source.getConfig()); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); BitmapShader shader = new BitmapShader(squareBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); paint.setShader(shader); paint.setAntiAlias(true); float radius = diameter / 2f; if (mBorderWidth > 0) { Paint bgPaint = new Paint(); bgPaint.setColor(mBorderColor); bgPaint.setAntiAlias(true); canvas.drawCircle(radius , radius , radius , bgPaint); } canvas.drawCircle(radius, radius, radius-mBorderWidth, paint); squareBitmap.recycle(); squareBitmap = null; return bitmap; } @Override public String key() { return getClass().getSimpleName(); } }