密度特定的图形总是必要的吗?

时间:2014-06-12 13:33:04

标签: android image screen-size

我是Android开发的新手,我一直在阅读如何在我的应用程序中正确包含图像资源。各种文章(包括android developer guide)描述了包含多个图像,通过将它们放在基于约定的资源文件夹中来定位不同的屏幕尺寸。

  

虽然系统会根据您的布局和可绘制资源进行扩展   当前的屏幕配置,您可能想要进行调整   不同屏幕尺寸的UI,并提供位图可绘制   针对不同的密度进行了优化。

然而,这意味着包含针对不同屏幕尺寸的多个图像并非总是

如果我为大屏幕包含一个足够大小的单个图像,那么系统应该将其缩小到较小的屏幕而不会出现任何像素化或丢失,对吗?我原以为这种方法也会降低应用程序的总体负载,因为应用程序中捆绑的图形文件较少。

我很欣赏可能存在应用程序设计人员可能希望根据屏幕大小定制单个图形的情况,但一般情况下单文件方法是更合适的策略吗? 提供密度特定图形的缺点是什么?

4 个答案:

答案 0 :(得分:2)

通常你应该至少提供drawable:

  • mdpi
  • hdpi
  • xhdpi
  • xxhdpi

ldpi现在几乎无关紧要,因为几乎没有任何设备仍属于该类别。通常情况下,您也不需要xxhdpi以上的任何内容。可以只提供xxhdpi drawables,Android会根据其他密度缩放它们,但这并不完美。可能存在一些像素化或通常较低的图像质量。如果您想获得良好的效果,您需要提供所有相关密度的可绘制产品。

如果你以某种方式无法提供较低密度的图像 - 我必须再次强调应该避免 - 如果可能的话 - 你可以帮助Android只通过使用尺寸和布局中可以轻松整理来正确缩放图像通过8,4和2.例如,您可以使用10dp8dp而不是12dp。使用只能被这三个因素整除的大小实际上是最佳做法。

有一些工具可以帮助您正确缩放drawable。即SDK附带的图像缩放器工具和Android Asset Studio

我相信你已经读过了,但这里是link to the relevant documentation

编辑:由于您提到可以通过不包括较低密度的图像来保持较小的APK:您必须记住最高密度的drawables构成您的大部分尺寸APK。不包括较低密度的那些对APK大小的影响真的不大。

答案 1 :(得分:1)

在布局中,您有一个想要显示某些图像的imageView。此图像尺寸为1100X800(以适应最大尺寸)。

基本上你的方法应该有用,但问题是你需要构建你的布局,以便很好地定义容器的尺寸。我的意思是要么你必须为图像视图提供静态尺寸(W:H),要么使用线性布局和权重。

同样使用这些最大尺寸的图像可能适用于图像视图容器,因为它们专门用于处理图像,因此具有一组可以使用的属性。如果你使用相同的图像作为relativeLayouts / LinearLayouts / Buttons的背景,它可能更像是一个繁忙的工作。

此外,如果您的图像只是一个纹理或要使用的颜色,那么这种方法很好。但是如果您的图像中有文字或徽标或某些特定形状,则此方法会倾向于以不成比例的大小显示图像。这部分永远不会被接受。

答案 2 :(得分:0)

理论上,是的,但实际情况有点不同。

正如Gabe在评论中提到的那样,一台800x480 4"屏幕,最有可能比quadHD 5"屏幕设备。

因此,如果您只包含所述xxhdpi,加上低端(或更旧)设备在处理您的应用时可能会出现OutOfMemory异常,那么整体性能(尤其是列表滚动)将会严重受损。

如果您对应用程序大小感到担心,最好的方法是使用gradle构建系统提供的风格(请参阅Android-Studio)。

答案 3 :(得分:0)

这还取决于图像的用法。如果它只是一个按钮图像资源,你可能想要使用一个可扩展的图像资源,就像这些9补丁一样。如果是这样的话,请参阅.9.png指南:http://developer.android.com/tools/help/draw9patch.html