【问题标题】:How Scale high resolution bitmaps to match device screen resolution and density?如何缩放高分辨率位图以匹配设备屏幕分辨率和密度?
【发布时间】:2014-12-25 03:39:50
【问题描述】:

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

根据有关Displaying Bitmaps Efficiently 的 Andropid 开发人员指南,我对缩放位图感到有些困惑。

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

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

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

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

感谢每一个答案。

【问题讨论】:

    标签: android image bitmapfactory


    【解决方案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());
    

    【讨论】:

    • 对不起,我可能对我的问题感到困惑。我已经将其编辑为清楚。感谢您的回答,这是我一直在寻找的。​​span>
    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多