仅在Android应用程序中使用XHDPI绘图工具?

仅在Android应用程序中使用XHDPI绘图工具?,android,drawable,screen-resolution,Android,Drawable,Screen Resolution,如果您计划在不久的将来支持LDPI、MDPI、HPDI,也许还支持XHDPI,那么在项目中只包括XHDPI可绘图设备,并让设备将其扩展到所需的分辨率,可以吗 我已经在Photoshop中测试了将可绘制文件调整为MDPI和HDPI,然后将结果与仅由Android调整大小的XHDPI可绘制文件进行了比较,我看不出有任何区别。走这条捷径是不是很糟糕?这将是很好的,不必调整每个和每个绘图到3个不同的决议 计划使用目标SDK是2.1或2.2 溴 埃米尔我想这是个好办法。我能想到的唯一缺点是小规模设备上的资

如果您计划在不久的将来支持LDPI、MDPI、HPDI,也许还支持XHDPI,那么在项目中只包括XHDPI可绘图设备,并让设备将其扩展到所需的分辨率,可以吗

我已经在Photoshop中测试了将可绘制文件调整为MDPI和HDPI,然后将结果与仅由Android调整大小的XHDPI可绘制文件进行了比较,我看不出有任何区别。走这条捷径是不是很糟糕?这将是很好的,不必调整每个和每个绘图到3个不同的决议

计划使用目标SDK是2.1或2.2


埃米尔

我想这是个好办法。我能想到的唯一缺点是小规模设备上的资源开销,以及由于规模缩小而可能出现的工件。实际上,在今年的Google IO上,Chris Pruett建议只嵌入高分辨率资产,并让opengl处理扩展。

XHDPI仅在Android SDK API Level 9(姜饼)中引入(请参阅),因此,如果您计划最低SDK级别低于9,您还需要提供,至少,HDPI drawables以及其他带有Froyo或更低版本的设备将不显示任何内容


更新:姜饼之前的版本似乎会显示xhdpi图像:

只有xhdpi资源是可以的。但请注意,xhdpi是在api级别9(姜饼)中引入的。也就是说,如果从Android 1.6开始将api级别设定为,则会处理不同的密度,包括XHDPI(直到2.2才正式添加)。您的应用程序将首先查找与其密度匹配的图像,但它可以查看更大的“存储桶”,如XHDPI,然后为您执行缩放

最好包括您想要支持的密度的特定资产。100x100的图像需要40kb;200x200的图像需要160k(未压缩)。因此,MDPI设备上使用的任何XHDPI资产的数据量都是您所需数据量的四倍,必须在应用程序启动和资源准备就绪时进行处理。内存使用率越低意味着效率越高,发生OutOfMemoryException的可能性越小

此外,当自动缩放时,特定类型的图像将看起来很糟糕。特别是,具有细线条或精细图案的图像将使其细节变得模糊。手动缩小图像时,可以选择最符合需要的算法(线性、双三次、lanczos等)

如果您担心自己调整大小所需的时间,您可以合并一个批处理过程或使用诸如Nine Patch Resizer之类的工具:

我在一个简单的应用程序(针对Android 2.1开发)中测试过,只使用xhdpi图像,在小、中、高分辨率下都可以正常工作。。。甚至我在Android 2.1(小分辨率)上进行了测试,它可以毫无问题地打开imagen


也许内存的问题是真的,所以有必要有人来测试一下。

我个人发现,在许多应用程序中使用xhdpi文件夹效果很好,我是这种方法的大力支持者。内存开销是正确的,但考虑到当今的设备,我认为它是可以忽略不计的。另外,我认为在缩小尺寸后会涉及一些缓存,因为我从来没有注意到有任何减速。只包含一个文件夹可以大大减少APK大小,最终用户会非常感激。你应该记住,有些图像会出现缩放瑕疵(精细的图案和东西),但我个人在我的应用程序中从未遇到过任何关键的东西。此外,对于按钮和其他东西,请确保使用9patches以减少圆角上的瑕疵,您甚至可以使用此方法稍微减小图像大小。API级别在旧版本上不会有问题,因为我认为可绘制的xhdpi在不支持它的版本上被认为是可绘制的。
不要忽视在xml中定义一些简单的可绘制内容的机会,例如,只需形状就可以很容易地创建渐变背景,这样可以节省空间,而且不会出现缩放瑕疵。

关于额外内存使用的说法是错误的

如果您将
XHDPI
大小的绘图表放入
MDPI
文件夹中,则内存会出现问题

但是,如果您在
XHDPI
文件夹中提供
XHDPI
绘图,则不会使用额外的内存,因为android会通过跳过部分图像来对图像进行下采样

这就是为什么您需要为您计划支持的每种密度提供可拉丝,以使其看起来美观的原因

另一方面,只有某些图像在下采样时看起来不好(大部分是小图标),因此只要图像有足够的数据可以丢弃,它就会看起来正常。或者,如果你有一个网格作为一个可绘制的,那么一些网格线可能会被扔掉,图像看起来会很糟糕


最后,您最好使用不同的设备进行试验,然后您就可以知道哪些Drawale需要其他资源来满足其密度。

知道这一点很好。我现在只使用xhdpi绘图工具进行开发。是否有可能提高缩小图像的质量?一些好的插值方法可能很棒。你可以启用mipmapping让系统创建不同大小的纹理版本,同时根据观察距离选择最佳的。这将提高渲染速度并减少瑕疵。欲了解更多信息,请参考关于Chris Pruett的引述,这有点误导,因为它是关于游戏的,你可以让GPU进行缩小。请链接到Chris Pruett的演讲:)是的,演讲是关于使用opengl,而不是默认的安卓组件。但实际上,组件的mipmap和不同分辨率的图像解决了相同的问题。您可以预先计算不同大小的位图,或者让系统在运行时进行计算(一次,通常兑现结果)。需要担心的是缩放工件,讨论的内容是opengl如何几乎总是正确地进行缩放,但是您可以使用更精细的缩放算法