-
-
Save julianshen/5829333 to your computer and use it in GitHub Desktop.
/* | |
* 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. | |
*/ | |
package com.example.picassodemo; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapShader; | |
import android.graphics.Canvas; | |
import android.graphics.Paint; | |
import com.squareup.picasso.Transformation; | |
/** | |
* Created by julian on 13/6/21. | |
*/ | |
public class CircleTransform implements Transformation { | |
@Override | |
public Bitmap transform(Bitmap source) { | |
int size = Math.min(source.getWidth(), source.getHeight()); | |
int x = (source.getWidth() - size) / 2; | |
int y = (source.getHeight() - size) / 2; | |
Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); | |
if (squaredBitmap != source) { | |
source.recycle(); | |
} | |
Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); | |
Canvas canvas = new Canvas(bitmap); | |
Paint paint = new Paint(); | |
BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); | |
paint.setShader(shader); | |
paint.setAntiAlias(true); | |
float r = size/2f; | |
canvas.drawCircle(r, r, r, paint); | |
squaredBitmap.recycle(); | |
return bitmap; | |
} | |
@Override | |
public String key() { | |
return "circle"; | |
} | |
} |
I've incorporated alxscms suggested change so that the script works with gif and other palletted bitmaps: https://gist.github.com/dtygel/71b77481ff9ddec26646
thnx!
I get a Null pointer @julianshen. This is the stack Trace. Thanks for the help.
java.lang.NullPointerException: Transformation circle returned null after 0 previous transformation(s).
Finally after 3 hours of wasting my time on stackoverflow, I found this! Thanks a ton!
Thank you!!!!!!
We can use shader.setLocalMatrix()
method to draw circle bitmap not from source bitmap left-top. So, there is no need to create square bitmap! You can find the optimized version here: https://gist.github.com/codezjx/b8a99374385a0210edb9192bced516a3
Thank you
Thank you that's perfect !
Nice.
I'll star it
Excellent .........
how used it in main ?
Thanks @alxscms for gif config help.
Thanks @alexcms for GIF config
Exception: Attempt to read from field 'int android.graphics.Bitmap$Config.nativeInt' on a null object reference
Solution (As suggested by @alexcms) : Replace line 42 with
Bitmap.Config config = source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(size, size, config);
You saved my job, Thanks a lot man 👍
I need your help ! How can I custom Rounded ImageView depend radius !
Thanke you.
thanks, hero
Good stuff here, 👍
imageview has black backgound how change it to transparent
Nice!
Why it crop the image?
Try this for picasso 3: https://gist.github.com/G00fY2/f3fbc468570024930c1fd9eb4cec85a1
Thank you!!!
Cool!!!
Thanks!
On a huawei P10 Mate, applying this transformation is 5ms on average (in our case, ofc)
Thank you
really cool