package com.kickstarter.libs.transformations; /* * Copyright 2014 Julian Shen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * *** * * Original: https://gist.github.com/julianshen/5829333 * Modifications: Some modifiers and annotations have been added by Kickstarter. */ import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.NonNull; import com.squareup.picasso.Transformation; public class CircleTransformation implements Transformation { private int x; private int y; @Override public Bitmap transform(final @NonNull Bitmap source) { final int size = Math.min(source.getWidth(), source.getHeight()); this.x = (source.getWidth() - size) / 2; this.y = (source.getHeight() - size) / 2; final Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); if (squaredBitmap != source) { source.recycle(); } final Bitmap.Config config = source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888; final Bitmap bitmap = Bitmap.createBitmap(size, size, config); final Canvas canvas = new Canvas(bitmap); final Paint paint = new Paint(); final BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); paint.setShader(shader); paint.setAntiAlias(true); final float r = size/2f; canvas.drawCircle(r, r, r, paint); squaredBitmap.recycle(); return bitmap; } @Override public String key() { return "circle(x=" + x + ",y=" + y + ")"; } }