From 9fda1b36e68a00ace3e0ab9d282f424226e081bd Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Mon, 5 Aug 2024 22:57:28 +0200 Subject: [PATCH] BitmapDrawable: prevent garbage collection while in use --- src/api-impl/android/graphics/drawable/BitmapDrawable.java | 3 ++- src/api-impl/android/widget/ImageView.java | 7 ++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/api-impl/android/graphics/drawable/BitmapDrawable.java b/src/api-impl/android/graphics/drawable/BitmapDrawable.java index 37b023b1..b37bf0fe 100644 --- a/src/api-impl/android/graphics/drawable/BitmapDrawable.java +++ b/src/api-impl/android/graphics/drawable/BitmapDrawable.java @@ -36,7 +36,8 @@ public class BitmapDrawable extends Drawable { throws XmlPullParserException, IOException { final TypedArray a = r.obtainAttributes(attrs, R.styleable.BitmapDrawable); if (a.hasValue(R.styleable.BitmapDrawable_src)) { - paintable = a.getDrawable(R.styleable.BitmapDrawable_src).paintable; + bitmap = ((BitmapDrawable)a.getDrawable(R.styleable.BitmapDrawable_src)).bitmap; + paintable = bitmap.getTexture(); } a.recycle(); } diff --git a/src/api-impl/android/widget/ImageView.java b/src/api-impl/android/widget/ImageView.java index d6d1fc79..e182ef66 100644 --- a/src/api-impl/android/widget/ImageView.java +++ b/src/api-impl/android/widget/ImageView.java @@ -7,7 +7,6 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.PorterDuff; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; @@ -61,12 +60,10 @@ public class ImageView extends View { public void setImageDrawable(Drawable drawable) { this.drawable = drawable; - if (drawable instanceof BitmapDrawable) { - setImageBitmap(((BitmapDrawable) drawable).getBitmap()); - } else if (drawable != null && drawable.paintable != 0) { + if (drawable != null) { drawable.setCallback(this); - native_setDrawable(widget, drawable.paintable); } + native_setDrawable(widget, drawable != null ? drawable.paintable : 0); } public void setImageMatrix(Matrix matrix) {}