2014-10-29 124 views
0

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

根据Andropid开发者指南关于缩放位图,我有点困惑Displaying Bitmaps Efficiently我无法理解此代码是否将位图缩放为屏幕像素或屏幕密度或两者的分辨率。

正如我可以在该代码中看到:

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

它创建了一个100x100的图像缩略图,所以我supose我必须通过这些参数的屏幕分辨率,屏幕密度的宽度和高度,但不知道...

我如何可以匹配缩放位图到屏幕组态?

感谢每一个答案。

回答

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()); 
+0

对不起,我也许是困惑我的问题。我编辑它是清楚的。谢谢你的回答,这是我一直在寻找的。 – GmloMalo 2014-10-30 10:51:28