From 8473f5a768a1eafda92c81d208c00db334dfa9d4 Mon Sep 17 00:00:00 2001 From: Chet Haase Date: Wed, 17 Jun 2015 14:43:30 -0700 Subject: [PATCH] ImageView updates cached drawable dimensions when drawable updates Changes to drawable dimensions were not propagated to cached dimension values in ImageView. Now this is done when the drawable is invalidated. Issue #18798152 ImageView caches wrong value of mDrawableWidth and mDrawableHeight Change-Id: I8da7d82b0543fa02d8ef3d896595bd0e5ea2a61e --- core/java/android/widget/ImageView.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 6b28f891e8f18..e0b239547f318 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -216,7 +216,7 @@ public class ImageView extends View { protected boolean verifyDrawable(Drawable dr) { return mDrawable == dr || super.verifyDrawable(dr); } - + @Override public void jumpDrawablesToCurrentState() { super.jumpDrawablesToCurrentState(); @@ -226,6 +226,15 @@ public class ImageView extends View { @Override public void invalidateDrawable(Drawable dr) { if (dr == mDrawable) { + if (dr != null) { + // update cached drawable dimensions if they've changed + final int w = dr.getIntrinsicWidth(); + final int h = dr.getIntrinsicHeight(); + if (w != mDrawableWidth || h != mDrawableHeight) { + mDrawableWidth = w; + mDrawableHeight = h; + } + } /* we invalidate the whole view in this case because it's very * hard to know where the drawable actually is. This is made * complicated because of the offsets and transformations that