Android:下载ImageView中的图像集小于捆绑包中相同大小的图像

时间:2012-03-05 17:01:30

标签: android download size local imagebutton

我很困惑。

我有一个应用程序,其中包含9个图像按钮3 x 3

的矩阵

中心按钮有一个徽标,该徽标从资源ID R.drawable.logo加载,其他徽标初始化为“暂无图像”图像。所有图像均为86 x 86,并通过屏幕构建工具进行设置。

当用户登录时,将从网上下载周围8个图像中的一个或多个。它们主要是86x86。

与预设图像相比,下载的图像在x和y方向上的大小为半个。

通过检查bitmapFactory选项对象,检查图像并将其称为86 x 86。

此页面中的两种不同方法下载的图片... How to load an ImageView by URL in Android?

2 个答案:

答案 0 :(得分:2)

如果找不到目标设备的密度dpi,则从资源中提取的图像将被放大。例如,如果您使用的设备为DisplayMetrics.DENSITY_HIGH(hdpi),但您只有/res/drawable-mdpi中的图片,那么当您通过{{1}之类的内容检索图片时,该图片将自动升级}。

但是,对于下载的图像,系统不知道图像设计的密度,因为它不包含在指定其密度的资源文件夹中,因此无法自动进行缩放。您必须使用getDrawable()手动定义密度。考虑以下功能:

BitmapFactory.Options

因此,如果指定网址的图片是针对mdpi屏幕设计的,则会为/** * Downloads an image for a specified density DPI. * @param context the current application context * @param url the url of the image to download * @param imgDensity the density DPI the image is designed for (DisplayMetrics.DENSITY_MEDIUM, DisplayMetrics.DENSITY_HIGH, etc.) * @return the downloaded image as a Bitmap */ public static Bitmap loadBitmap(Context context, String url, int imgDensity) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); BitmapFactory.Options options = new BitmapFactory.Options(); // This defines the density DPI the image is designed for. options.inDensity = imgDensity; // These define the density DPI you would like the image to be scaled to (if necessary). options.inScreenDensity = metrics.densityDpi; options.inTargetDensity = metrics.densityDpi; try { // Download image InputStream is = new java.net.URL(url).openStream(); return BitmapFactory.decodeStream(is, null, options); } catch(Exception ex) { // Handle error } return null; } 参数传递DisplayMetrics.DENSITY_MEDIUM。如果当前上下文具有更大的密度DPI(例如imgDensity),则图像将相应地进行放大。

答案 1 :(得分:0)

android:scaleType =“fitXY”添加到ImageView。这将始终在指定的边框内渲染图像。