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

Android 如何缩放高分辨率位图以匹配设备屏幕分辨率和密度?,android,image,bitmapfactory,Android,Image,Bitmapfactory,我正在开发一个带有多个片段的android应用程序,每个片段都包含多个不同于其他片段的位图。由于.apk文件的大小很大,为每个可绘制密度文件夹提供了位图,因此我决定提供一个高分辨率位图(一个高分辨率位图,用于每个不同片段的每个不同位图)在可绘制xxhdpi中分配,并根据设备屏幕分辨率和/或密度在运行时缩小 我对根据Android开发者指南缩放位图有点困惑,我不明白这段代码是将位图缩放到屏幕分辨率(以像素为单位),还是屏幕密度(以像素为单位),或者两者兼而有之 正如我在这段代码中看到的: mIma

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

我对根据Android开发者指南缩放位图有点困惑,我不明白这段代码是将位图缩放到屏幕分辨率(以像素为单位),还是屏幕密度(以像素为单位),或者两者兼而有之

正如我在这段代码中看到的:

mImageView.setImageBitmap( decodeSampledBitmapFromResource(getResources(),R.id.myimage,100100))

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

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


感谢每一个答案

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

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

这里的方法是使用独立于设备的像素(dip或dp)。具有相同屏幕大小的设备的宽度和高度将始终具有相同的dp。由于您指定的此方法需要像素,因此显示了在dp和像素之间转换的好方法


对不起,我可能对我的问题感到困惑。我把它编辑得很清楚。谢谢你的回答,这是我一直在寻找的。
Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, amountInDp, r.getDisplayMetrics());