summaryrefslogtreecommitdiff
path: root/src/com/android/bitmap/drawable/CircularBitmapDrawable.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/bitmap/drawable/CircularBitmapDrawable.java')
-rw-r--r--src/com/android/bitmap/drawable/CircularBitmapDrawable.java15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/com/android/bitmap/drawable/CircularBitmapDrawable.java b/src/com/android/bitmap/drawable/CircularBitmapDrawable.java
index 8536f58..a4af368 100644
--- a/src/com/android/bitmap/drawable/CircularBitmapDrawable.java
+++ b/src/com/android/bitmap/drawable/CircularBitmapDrawable.java
@@ -43,6 +43,7 @@ public class CircularBitmapDrawable extends ExtendedBitmapDrawable {
private final Paint mBorderPaint = new Paint();
private float mBorderWidth;
+ private Bitmap mShaderBitmap;
public CircularBitmapDrawable(Resources res,
BitmapCache cache, boolean limitDensity) {
@@ -120,20 +121,22 @@ public class CircularBitmapDrawable extends ExtendedBitmapDrawable {
protected void onDrawCircularBitmap(final Bitmap bitmap, final Canvas canvas,
final Rect src, final Rect dst, final float alpha) {
// Draw bitmap through shader first.
- BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP,
- TileMode.CLAMP);
- sMatrix.reset();
+ BitmapShader shader = (BitmapShader) mBitmapPaint.getShader();
+ if (shader == null || mShaderBitmap != bitmap) {
+ shader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
+ mShaderBitmap = bitmap;
+ mBitmapPaint.setShader(shader);
+ }
+ sMatrix.reset();
// Fit bitmap to bounds.
float scale = Math.max((float) dst.width() / src.width(),
(float) dst.height() / src.height());
sMatrix.postScale(scale, scale);
-
// Translate bitmap to dst bounds.
sMatrix.postTranslate(dst.left, dst.top);
-
shader.setLocalMatrix(sMatrix);
- mBitmapPaint.setShader(shader);
+
int oldAlpha = mBitmapPaint.getAlpha();
mBitmapPaint.setAlpha((int) (oldAlpha * alpha));
canvas.drawCircle(dst.centerX(), dst.centerY(), dst.width() / 2,