summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2015-07-10 01:43:13 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-07-10 01:43:13 +0000
commit31ff4513d25b215f4e36ac24c313239d25998f86 (patch)
tree2713ab3ad0cdbe9c6b6ce718ab18848909c2f135
parentb7cf986eb875e7a8b4489c30b73e43a52951b4f1 (diff)
parentb7ba1220a3dc3012d2e22825eaeb0e643333f5a4 (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.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 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();