题 针对不同密度的不同9补丁图像?


我在MDPI / HDPI / xhdpi中有相同的9补丁图像。是否有特殊原因导致它不能保存为最小尺寸?当内容较大时,可伸展区域自动缩放,例如背景为9补丁。

示例背景:

MDPI: mdpi

华电国际: hdpi

xhdpi: xhdpi


23
2018-03-30 10:44


起源




答案:


许多九个补丁非常小,通常不需要为不同的屏幕尺寸重新创建它们。

在您的示例中,背景的角不会缩放。如果你只是在所有分辨率上使用相同的角落,它们在不同的分辨率上会有不同的大小。在较小的手机上,角落在较大的手机上会显得更大,角落看起来会更小。

另一个例子是一条线。如果您有一条具有特殊效果的线条,并将其创建为mdpi屏幕的九个补丁,并且该线条高度为两个像素。只需重复使用此绘图而不在xhdpi屏幕上缩放将使您的线在此屏幕上的两个像素高。但是因为屏幕具有较小的像素(较高的分辨率,相同的显示尺寸),所以该线看起来更细。

因此,您始终需要为每个分辨率创建一个9-Patch,或者@Shubhayu表示只生成高分辨率的九个补丁,并且如果系统将其缩小以用于其他分辨率,则接受它们变得模糊。


29
2018-03-30 11:13



现在明白了。问候比勒费尔德:-) - user949884
如果它解决了你的问题,你可以接受答案:) - Janusz
是的,你对2像素高的例子是正确的。虽然我没有观察到缩小图像的问题。有可能我没有处理会显示差异的图像。谢谢你的提示:)下次我会记住这一点。 - Shubhayu
如果你懒惰,你可以尝试这个工具: code.google.com/p/9patch-resizer 我刚上传它,它生成任何png的ldpi,mdpi和hdpi版本,或者9个补丁png - Redwarp


您不需要在所有3个文件夹中放置不同大小的9补丁图像。只需将具有最高分辨率的一个放在drawable文件夹中即可。 Android会为你所有不同的密度选择它。

此外,图像的清晰度取决于图像的分辨率。如果保存最小尺寸(即分辨率最低),您会看到高密度设备出现模糊拉伸。如果背景图像为纯色,则不会显示。当背景有一些设计/可重复的渐变时,你会注意到差异。

编辑: 自从写这篇文章以来,我发现了很多关于9补丁的东西。 9补丁图像不会缩小。最好是放置最小尺寸的图像。根据它寻找其他密度的方式,你应该为受影响的密度制作9个补丁图像。这里有更多细节,

http://www.shubhayu.com/android/9-patch-image-designers-vs-developers


6
2018-03-30 11:00



它将从最高密度调整图像大小以匹配所选密度,并从其上调整大小的图像将使用九个补丁机制来拉伸图像。这将导致图像模糊,不建议使用。 - Janusz
9-patch缩小?我认为只会扩大规模。 - user949884
如果Android从mhdpi手机的xhdpi文件夹中选择一个drawable,它将缩小图像,无论它们是否为9-Patch。请参阅我的回答以获取更多信息我也很难学习这个;) - Janusz
对于真实设备可能不是这样,但Android模拟器不能像其他drawable一样处理9-Patch资产。 API 8-10的仿真器需要基线9-Patch资产,否则会因ResourceNotFoundException而崩溃。其他资产没有这个问题。在API 17上,模拟器不会崩溃,但9补丁资产不会按预期延伸,通常会呈现完全黑色。似乎必须为所有支持的密度创建9-Patch资产,只是为了确保您的应用程序不会崩溃或看起来很荒谬。 - James Wald