如何缩放高分辨率位图以匹配设备屏幕分辨率和密度?

时间:2014-10-29 12:24:04

标签: android image bitmapfactory

我正在开发一个带有多个片段的Android应用程序,每个片段都包含来自其他片段的多个不同位图。由于.apk文件的大尺寸为每个可绘制密度文件夹提供了这些位图,我决定在drawable-xxhdpi中分配一个单独的高分辨率位图(每个不同片段的每个不同片段的高分辨率位图)并根据设备屏幕分辨率和/或密度在运行时缩小它。

根据Andropid开发人员指南关于缩放位图我有点困惑Displaying Bitmaps Efficiently我无法理解这个代码是否缩放到以像素为单位的屏幕分辨率或屏幕密度,或者两者兼而有之。

正如我在此代码中看到的那样:

  

mImageView.setImageBitmap(   decodeSampledBitmapFromResource(getResources(),R.id.myimage,100,100));

它会创建一个100x100的图像缩略图,所以我需要在这些参数中传递屏幕分辨率或屏幕密度宽度和高度,但不确定......

如何将缩放的位图与屏幕配置相匹配?

感谢每一个答案。

1 个答案:

答案 0 :(得分:1)

首先,我强烈反对不使用Android的内置系统,它根据屏幕尺寸/密度自动加载出现在多个可绘制文件夹中的图像。确实,这样做会增加APK的大小,但是在运行时加载单个位图并将其缩小/缩小会降低应用程序的性能,并且很可能导致浪费内存分配问题和广泛各种各样的错误。

如果您坚持自己缩放位图,那么我可以通过您的方法看到的第一个问题是您传递的参数(100,100)是像素中的大小。不同密度的设备将具有不同的像素量,因此100x100在一个设备上可能看起来非常大,但在具有更好密度的设备上非常小。

这里的方法是使用与设备无关的像素(dip或dp)。具有相同屏幕尺寸的设备的宽度和宽度始终具有相同的dp。高度。由于您指定的此方法需要像素,因此显示了在dp和像素之间进行转换的好方法here

Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, amountInDp, r.getDisplayMetrics());
相关问题