summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/ImageView.java22
-rw-r--r--graphics/java/android/graphics/drawable/BitmapDrawable.java3
2 files changed, 23 insertions, 2 deletions
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index a1582f2..a1e6cc8 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -570,6 +570,17 @@ public class ImageView extends View {
}
}
+ private static class ImageViewBitmapDrawable extends BitmapDrawable {
+ public ImageViewBitmapDrawable(Resources res, Bitmap bitmap) {
+ super(res, bitmap);
+ }
+
+ @Override
+ public void setBitmap(Bitmap bitmap) {
+ super.setBitmap(bitmap);
+ }
+ };
+
/**
* Sets a Bitmap as the content of this ImageView.
*
@@ -579,7 +590,16 @@ public class ImageView extends View {
public void setImageBitmap(Bitmap bm) {
// if this is used frequently, may handle bitmaps explicitly
// to reduce the intermediate drawable object
- setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
+ if (mDrawable instanceof ImageViewBitmapDrawable) {
+ ImageViewBitmapDrawable recycledDrawable = (ImageViewBitmapDrawable) mDrawable;
+ // Hacky fix to force setImageDrawable to do a full setImageDrawable
+ // instead of doing an object reference comparison
+ mDrawable = null;
+ recycledDrawable.setBitmap(bm);
+ setImageDrawable(recycledDrawable);
+ } else {
+ setImageDrawable(new ImageViewBitmapDrawable(mContext.getResources(), bm));
+ }
}
public void setImageState(int[] state, boolean merge) {
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index fcd7f63..cf91be1 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -219,7 +219,8 @@ public class BitmapDrawable extends Drawable {
}
}
- private void setBitmap(Bitmap bitmap) {
+ /** @hide */
+ protected void setBitmap(Bitmap bitmap) {
if (mBitmapState.mBitmap != bitmap) {
mBitmapState.mBitmap = bitmap;
computeBitmapSize();