OSDN Git Service

ImageView updates cached drawable dimensions when drawable updates
authorChet Haase <chet@google.com>
Wed, 17 Jun 2015 21:43:30 +0000 (14:43 -0700)
committerChet Haase <chet@google.com>
Wed, 17 Jun 2015 22:28:25 +0000 (15:28 -0700)
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

index 6b28f89..e0b2395 100644 (file)
@@ -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