3

我的应用支持从 ldpi 到 xhdpi 的各种屏幕密度。它包含一些需要在所有密度上正确显示的可绘制对象(图像)。我想知道实际上需要提供多少种不同分辨率的drawable,考虑到Android运行时在找不到合适密度的资源时会缩放资源。

如果您只提供 mdpi 可绘制对象,它们将在 hdpi/xhdpi(模糊)上按比例放大,在 ldpi 屏幕上按比例缩小。

但是,如果您只提供 xhdi 资源,那么它们将在所有低密度屏幕上按比例缩小。缩小不会使它们变得模糊,它们看起来会很好。

那么,为什么还要为 xhdpi 以外的其他密度提供可绘制对象呢?

4

4 回答 4

8

使用预缩放可绘制对象有几个原因:

  1. 缩小到较低的分辨率会占用资源(CPU 时间、内存,并且会更快地耗尽电池),尤其是如果您有很多图像,这可能是不受欢迎的。

  2. 缩小大图像可能会导致比使用“预先调整”的小图像更差的质量。特别是如果您的图像基于矢量原件。或者它们包含非常精细的线条或细节,当缩放时会丢失。
    例如:
    原始图像变为缩放图像
    See here以获取这些图像的来源以及有关缩放伪影的更多信息。

  3. 在较低分辨率下,图像像素较大(或图像变小),因此可能需要删除图像的某些方面以保持清晰/易于理解。

于 2013-01-08T12:26:50.367 回答
1

您关于扩展资源的假设是不正确的。一些大图像在按比例缩小后可能仍然看起来不错,但这不是一般情况。如果图像有平滑的过渡并且没有渐变,它会很好地按比例缩小。例如,包含急剧过渡或包含文本的图像在较低分辨率下会看起来很丑。

于 2013-01-08T12:26:51.770 回答
0

如果您自己进行缩放,那么与自动缩放相比,结果可能会更好,而且如果准备好可绘制对象,您的应用程序不会消耗用于缩放的资源。

于 2013-01-08T12:27:32.983 回答
0

不是必需的,但例如,您可以针对不同的屏幕分辨率使用具有不同可绘制对象的不同布局。您可以选择这样做。如果您和您的用户对结果感到满意,那就太酷了。如果您需要不同密度和分辨率的不同行为,那么此功能非常有用。

于 2013-01-08T12:29:12.857 回答