我很困惑。
我有一个应用程序,其中包含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?
答案 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。这将始终在指定的边框内渲染图像。