summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wei <markwei@google.com>2014-03-02 19:25:41 -0800
committerMark Wei <markwei@google.com>2014-03-02 19:25:41 -0800
commit09f46006437e7de33afdb51192bf0bdc08e97040 (patch)
tree1398af7f562bc676f9efc5275cd926a04955590c
parentad97cd0e0753930ec68f189e6be1023dc0f62f75 (diff)
downloadbitmap-09f46006437e7de33afdb51192bf0bdc08e97040.tar.gz
CircularBitmapDrawable is now an ExtendedBitmapDrawable. Avatars can now fade in!
Change-Id: I79fae35f0949a17309bce0cffd6b10e7e6d8db2c
-rw-r--r--src/com/android/bitmap/drawable/CircularBitmapDrawable.java27
-rw-r--r--src/com/android/bitmap/drawable/ExtendedBitmapDrawable.java16
-rw-r--r--src/com/android/bitmap/drawable/TileDrawable.java4
3 files changed, 40 insertions, 7 deletions
diff --git a/src/com/android/bitmap/drawable/CircularBitmapDrawable.java b/src/com/android/bitmap/drawable/CircularBitmapDrawable.java
index 32eb460..878cb6b 100644
--- a/src/com/android/bitmap/drawable/CircularBitmapDrawable.java
+++ b/src/com/android/bitmap/drawable/CircularBitmapDrawable.java
@@ -27,6 +27,7 @@ import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.Shader.TileMode;
+import android.graphics.drawable.BitmapDrawable;
import com.android.bitmap.BitmapCache;
@@ -35,7 +36,7 @@ import com.android.bitmap.BitmapCache;
*
* This draws all bitmaps as a circle with an optional border stroke.
*/
-public class CircularBitmapDrawable extends BasicBitmapDrawable {
+public class CircularBitmapDrawable extends ExtendedBitmapDrawable {
private static Matrix sMatrix = new Matrix();
private final Paint mBitmapPaint = new Paint();
@@ -45,7 +46,12 @@ public class CircularBitmapDrawable extends BasicBitmapDrawable {
public CircularBitmapDrawable(Resources res,
BitmapCache cache, boolean limitDensity) {
- super(res, cache, limitDensity);
+ this(res, cache, limitDensity, null);
+ }
+
+ public CircularBitmapDrawable(Resources res,
+ BitmapCache cache, boolean limitDensity, ExtendedOptions opts) {
+ super(res, cache, limitDensity, opts);
mBitmapPaint.setAntiAlias(true);
mBitmapPaint.setFilterBitmap(true);
@@ -85,7 +91,17 @@ public class CircularBitmapDrawable extends BasicBitmapDrawable {
@Override
protected void onDrawBitmap(final Canvas canvas, final Rect src,
final Rect dst) {
- onDrawCircularBitmap(getBitmap().bmp, canvas, src, dst);
+ onDrawCircularBitmap(getBitmap().bmp, canvas, src, dst, 1f);
+ }
+
+ @Override
+ protected void onDrawPlaceholderOrProgress(final Canvas canvas,
+ final TileDrawable drawable) {
+ BitmapDrawable placeholder = (BitmapDrawable) drawable.getInnerDrawable();
+ Bitmap bitmap = placeholder.getBitmap();
+ float alpha = placeholder.getPaint().getAlpha() / 255f;
+ sRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight());
+ onDrawCircularBitmap(bitmap, canvas, sRect, getBounds(), alpha);
}
/**
@@ -93,7 +109,7 @@ public class CircularBitmapDrawable extends BasicBitmapDrawable {
* BitmapShader.
*/
protected void onDrawCircularBitmap(final Bitmap bitmap, final Canvas canvas,
- final Rect src, final Rect dst) {
+ final Rect src, final Rect dst, final float alpha) {
// Draw bitmap through shader first.
BitmapShader shader = new BitmapShader(bitmap, TileMode.CLAMP,
TileMode.CLAMP);
@@ -109,8 +125,11 @@ public class CircularBitmapDrawable extends BasicBitmapDrawable {
shader.setLocalMatrix(sMatrix);
mBitmapPaint.setShader(shader);
+ int oldAlpha = mBitmapPaint.getAlpha();
+ mBitmapPaint.setAlpha((int) (oldAlpha * alpha));
canvas.drawCircle(dst.centerX(), dst.centerY(), dst.width() / 2,
mBitmapPaint);
+ mBitmapPaint.setAlpha(oldAlpha);
// Then draw the border.
canvas.drawCircle(dst.centerX(), dst.centerY(),
diff --git a/src/com/android/bitmap/drawable/ExtendedBitmapDrawable.java b/src/com/android/bitmap/drawable/ExtendedBitmapDrawable.java
index b6093e7..0e01142 100644
--- a/src/com/android/bitmap/drawable/ExtendedBitmapDrawable.java
+++ b/src/com/android/bitmap/drawable/ExtendedBitmapDrawable.java
@@ -71,9 +71,12 @@ public class ExtendedBitmapDrawable extends BasicBitmapDrawable implements
private final Handler mHandler = new Handler();
public ExtendedBitmapDrawable(final Resources res, final BitmapCache cache,
- final boolean limitDensity, final ExtendedOptions opts) {
+ final boolean limitDensity, ExtendedOptions opts) {
super(res, cache, limitDensity);
mResources = res;
+ if (opts == null) {
+ opts = new ExtendedOptions(0);
+ }
mOpts = opts;
onOptsChanged();
@@ -258,8 +261,8 @@ public class ExtendedBitmapDrawable extends BasicBitmapDrawable implements
// Draw the two possible overlay layers in reverse-priority order.
// (each layer will no-op the draw when appropriate)
// This ordering means cross-fade transitions are just fade-outs of each layer.
- if (mProgress != null) mProgress.draw(canvas);
- if (mPlaceholder != null) mPlaceholder.draw(canvas);
+ if (mProgress != null) onDrawPlaceholderOrProgress(canvas, mProgress);
+ if (mPlaceholder != null) onDrawPlaceholderOrProgress(canvas, mPlaceholder);
}
/**
@@ -269,6 +272,13 @@ public class ExtendedBitmapDrawable extends BasicBitmapDrawable implements
super.draw(canvas);
}
+ /**
+ * Overriding this method to add your own custom placeholder or progress drawing.
+ */
+ protected void onDrawPlaceholderOrProgress(final Canvas canvas, final TileDrawable drawable) {
+ drawable.draw(canvas);
+ }
+
@Override
public void setAlpha(int alpha) {
final int old = mPaint.getAlpha();
diff --git a/src/com/android/bitmap/drawable/TileDrawable.java b/src/com/android/bitmap/drawable/TileDrawable.java
index 42400b4..d188281 100644
--- a/src/com/android/bitmap/drawable/TileDrawable.java
+++ b/src/com/android/bitmap/drawable/TileDrawable.java
@@ -68,6 +68,10 @@ public class TileDrawable extends Drawable implements Drawable.Callback {
setVisible(false);
}
+ public Drawable getInnerDrawable() {
+ return mInner;
+ }
+
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);