From 9d8d9c22bb98e656cb2e42673c4ba801821c4e5d Mon Sep 17 00:00:00 2001 From: Bjorn Bringert Date: Wed, 6 Jan 2010 22:52:41 +0000 Subject: [PATCH] Get correct density info when using resource URIs in ImageView Before, when an android.resource URI was passed to ImageView.setImageURI(), it was loaded through an InputStream. This didn't get the density information correctly. Instead, we use Resources to load the Drawable, which fixes the denisty problem. Change-Id: Ie8427ea04da43f414b49014d012671fc0aa27a30 --- core/java/android/widget/ImageView.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java index 8f2404125dddb..38533593a3db6 100644 --- a/core/java/android/widget/ImageView.java +++ b/core/java/android/widget/ImageView.java @@ -491,8 +491,16 @@ public class ImageView extends View { } } else if (mUri != null) { String scheme = mUri.getScheme(); - if (ContentResolver.SCHEME_CONTENT.equals(scheme) - || ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme) + if (ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) { + try { + // Load drawable through Resources, to get the source density information + ContentResolver.OpenResourceIdResult r = + mContext.getContentResolver().getResourceId(mUri); + d = r.r.getDrawable(r.id); + } catch (Exception e) { + Log.w("ImageView", "Unable to open content: " + mUri, e); + } + } else if (ContentResolver.SCHEME_CONTENT.equals(scheme) || ContentResolver.SCHEME_FILE.equals(scheme)) { try { d = Drawable.createFromStream(