diff options
| author | 2015-07-10 01:43:13 +0000 | |
|---|---|---|
| committer | 2015-07-10 01:43:13 +0000 | |
| commit | 31ff4513d25b215f4e36ac24c313239d25998f86 (patch) | |
| tree | 2713ab3ad0cdbe9c6b6ce718ab18848909c2f135 | |
| parent | b7cf986eb875e7a8b4489c30b73e43a52951b4f1 (diff) | |
| parent | b7ba1220a3dc3012d2e22825eaeb0e643333f5a4 (diff) | |
am b7ba1220: Teach ImageView to recycle internal drawables
* commit 'b7ba1220a3dc3012d2e22825eaeb0e643333f5a4':
Teach ImageView to recycle internal drawables
| -rw-r--r-- | core/java/android/widget/ImageView.java | 22 | ||||
| -rw-r--r-- | graphics/java/android/graphics/drawable/BitmapDrawable.java | 3 |
2 files changed, 23 insertions, 2 deletions
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index a1582f2549b7..a1e6cc8b0510 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 fcd7f63afaaf..cf91be1ea364 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(); |