Android:可绘制的分辨率

Posted

技术标签:

【中文标题】Android:可绘制的分辨率【英文标题】:Android: drawable resolutions 【发布时间】:2011-06-27 22:59:41 【问题描述】:

我已经通过this post(和其他人)以及通过documentation 了解在android 中支持不同的屏幕分辨率,但我找不到一个(简单)问题的明确答案:

在 Android 应用中只对图像使用“res/drawable”可以吗?

背景:此特定应用程序中唯一需要的图像是应用程序图标本身和通知图标,任何布局中都不会有任何图像。所以在我的理解中,如果没有“hdpi” "-、"mdpi"- 和 "ldpi"- 文件夹,Android 将使用 "res/drawable" 作为后备。由于不同屏幕分辨率的唯一缺陷似乎是 Android 将缩放图像具体分辨率如果没有找到特殊的,这应该只是UPscaling时的问题,因为图像会变得模糊。但是,如果我在“res/drawable”中提供所有“hdpi”图像(而不是 3 个不同的图像),如果尺寸太大,Android 不会缩小这些图像吗?如果这是真的,我可以保存一些APK 空间仅占图像的三分之一。

后续问题:我读到对于 API 级别 3,需要名为“drawable-v3”的目录。这是真的还是“可绘制”也是这个 API 级别的后备?

感谢任何提示。

【问题讨论】:

【参考方案1】:

drawables 文件夹中的图像假定为 mdpi 分辨率,因此如果您不提供其他图像,它们将按比例放大/缩小。

按比例放大的图像分辨率低且看起来模糊。缩小的图像会丢失像素并且看起来参差不齐。

因此,您的应用将仅使用一组默认图像“工作”,但在许多设备上看起来很糟糕。我强烈建议您创建不同尺寸的图像,以便在所有设备上看起来都很棒 - 这有点无聊,但并不难。

不久我们就会拥有 xhdpi 设备,所以当您使用它时,您可能也想创建这些设备。

我假设你已经阅读了this

【讨论】:

是的,我读到了,我只是在帖子中输入了错误的 URL,我已经编辑了链接,谢谢。由于我的应用程序只使用应用程序图标和通知图标,我想我会尝试一下......锯齿状的应用程序图标不能太糟糕:) 但是多次添加一个图像(对于 ldpi、mdpi、hdpi、xhdpi、xxhdpi)会大大增加大小,在我的项目中,我有 15 个活动,对于每个活动,我都有不同的图像,并且总共有 96 个。因此每个可绘制文件夹 96 个图像(5)= 480 个图像。对于 ldpi mdpi 中的图像,这不是大问题,因为它们很小。但是可绘制文件夹中的其他图像,我的图像大小如下:hdpi - 14MB xhdpi - 19MB xxhdpi - 39MB 所有这些都与.apk的大小有关。【参考方案2】:

不是一个完整的答案,但是:高度缩小的图像可以而且通常看起来与放大的图像一样糟糕(但方式不同),因为图形库几乎只使用插值方法来调整大小,而插值方法在术语方面受到限制在严重的信息丢失之前他们可以缩小多少图像(线性方法约为 50%,双三次方法约为 25%)。这就是为什么大多数平台都发展出一些约定(如 hdpi、mdpi 等),让您可以嵌入最适合每种屏幕尺寸的图像。

【讨论】:

这只会影响应用程序图标本身,其中 hdpi 72x72 和 ldpi 是 36x36,在缩小时应该不会那么糟糕,对吧? 不,它可能看起来很糟糕。您真的应该使用 Photoshop 之类的复杂图形引擎或其他工具进行缩减——它们的算法将产生比编程环境的图形引擎更好的结果(它针对性能而不是最终结果质量进行了优化)。 我所有的图片都是三种尺寸的,用图形程序完成,我只是想在最终的 APK 大小中保护这几 kB :) @Select0r:没有什么比第一印象更重要的了,你的应用程序图标就是第一印象。我不会尝试在那里节省空间。【参考方案3】:

我一直使用 drawable/,然后我去 BestBuy 和所有本地无线商店并在小型/大型/大型(平板电脑)设备上测试我的应用程序,它们看起来还不错。

【讨论】:

很高兴知道仅使用 drawable/ 的想法并不太牵强。我不知道周围有哪家商店会提供任何实际连接到网络的移动设备(如果这些设备实际充电并且可以在没有 PIN 码的情况下打开,那你很幸运),但这绝对是个好主意! 【参考方案4】:

除非您有某些理由针对前 Donut 设备(根据http://developer.android.com/resources/dashboard/platform-versions.html,现在只有 4% 的设备),否则您应该将位图放在 -Xdpi 目录之一中。出于兼容性原因,通用的“drawable”目录是“drawable-mdpi”的同义词,但现代编写良好的应用程序应该将其可绘制对象放在与其设计密度相匹配的目录中。

【讨论】:

【参考方案5】:

res/drawable 是后备

需要注意的是,缩放不仅会降低图像质量,还会花费处理时间。

我什至还没有阅读 API-Level 3 文档,抱歉 1/2 的答案

【讨论】:

但是重新缩放的图像不会被缓存,因此处理器时间会在启动时“丢失”吗? (我们在这里只讨论少量图像,最大的是 72x72 的应用程序图标)。关于 v3:例如这篇文章讨论了“-v3”文件夹:***.com/questions/2496506/…【参考方案6】:

无论如何,我发现 Android 的图像处理既乏味又不可靠。为不同的屏幕包含不同大小的图像的概念将导致大型应用程序文件因图像而膨胀。已经有一些屏幕不适合标准分辨率范围。我发现最好不要让 android 处理缩放,它似乎为您定位的最小屏幕创建一个基本图像,然后将其放大,从而在大屏幕上生成普通的图像。即使您专门为大屏幕制作图像,也会发生这种情况。 我的解决方案似乎适用于从 2 英寸三星手机到索尼平板电脑的所有设备,它是创建高分辨率图像并使用 Bitmap.createScaledBitmap() 来获得我需要的大小。

警告:我是 Android 新手,还有很多东西要学。

【讨论】:

以上是关于Android:可绘制的分辨率的主要内容,如果未能解决你的问题,请参考以下文章

特定分辨率的可绘制文件夹的不同图像大小

如何为所有 Android 分辨率准备图像?

android中的自定义视图

Android OpenGL camera2纹理分辨率

Android OpenGL camera2 纹理分辨率

Android 屏幕分辨率适配