很多资源的9patch边框如何不失真?

9
我的设计师使用Illustrator工作,并使用脚本为mdpi、hdpi和xhdpi(以及iOS res)导出所有资源。对于按钮和可伸缩图片,我正在寻找最佳解决方案来生成9patches。
到目前为止,我一直在使用SDK中的draw9patch软件来生成9patches。它仍然有效,但是说实话,我希望有更好的方法。如果在我的项目中有20个按钮,每个按钮有3或4种状态,再加上3种密度类型,我无法想象这种方法需要多长时间。
一种解决方案是使用Asset Studio工具,但我不想提供我的xhdpi文件,并得到其他密度文件夹中质量差的图像。我的目标是获得每个密度的完美像素9patches。
我们还尝试使用SVG文件来制作可伸缩图像,但似乎Asset Studio不接受它们。
如果我的设计师尝试直接在Illustrator中制作9patch,则无法使用脚本进行导出,因为1像素线也会被缩放,不再测量1像素。
那么有没有解决方案可以制作9patches,而不会失去图像质量,并且不需要花费十个小时?

这是一个非常好的问题 - 一个Photoshop插件会很棒,但据我所知目前并不存在... - Michał Klimczak
5个回答

2
我的解决方案是花费大量时间学习draw9patch,然后制作按钮就不需要花费几个小时了。我自己做过这个,吃过苦头,但是draw9patch是一种非常简单的方法,每个按钮的图像只需要不到15秒的时间。draw9patch图像非常好,因为你只需要做一次,它们将适用于所有密度,因为它们会相应地拉伸。如果您的图像中有文本,则会出现另一个问题。这是不被赞同的,因为您失去了使用简单stings.xml翻译应用程序的能力。
我的解决方案:
1. 精通draw9patch
2. 不要使用带有文本的图像。draw9patch可以用于正确居中按钮的文本,这将增加您的应用程序在不同语言中的使用能力。这很重要,因为即使您让您的应用程序能够针对更多语言(比如……西班牙语),那么它也会让目标受众感到高兴。

1
我已经使用了draw9patch工具制作了很多9-patches,而且我认为我们不需要花费数小时去学习如何使用它,因为它非常直观易懂。但是,我们需要在实际使用它时花费数小时...尝试一下其他答案中给出的工具,你就会发现。另外,“draw9patch图像非常棒,因为你只需要制作一次,它们就可以适应所有密度,因为它们会相应地拉伸。”这是错误的。9-patches不能解决密度“问题”,如果你没有在每个密度文件夹中提供一个9-patch,则你的9-patch将被缩放,你将获得伪影或模糊的图像。 - Chayy

2
这里有一个很好的九宫格编辑器,为我节省了大量时间:下载JAR链接一些描述。最棒的功能是“复制粘贴”功能,可以快速提供相同的可伸缩区域以适用于不同状态的图像。
我认为没有什么编辑器可以处理不同的图像尺寸,因为不同的屏幕尺寸可能存在显著差异。

我之前不认识这个软件,但我觉得它很不错。但是,better9-patch-tool也有这些功能,而且还有一个批处理功能,可以让我在一张图片上工作并将其应用到一个文件夹中的所有图片。除此之外,我更喜欢你的工具的GUI界面。 - Chayy
是的,我买了better9patch-tool,但完全不喜欢它...GUI很糟糕,而且我讨厌那些线是连续的,而不是像素对像素(这使得一个像素可伸缩区域几乎不可能实现,而这通常是需要的)。这个看起来更好。 - Michał Klimczak

0
那么,有没有办法制作9patches,既不会损失图像质量,也不需要花费十个小时?
步骤 1:编写一个脚本,使用任何你喜欢的桌面编程语言中的 PNG 读取库,从一个 PNG 中获取 9-patch 信息并将其应用于另一个 PNG。
步骤2:使用 draw9patch 为一个密度的一张图片确定正确的九宫格规则。
步骤3:使用脚本将这些规则应用于同一密度下状态的其他变化。
步骤4:为其他密度重复步骤 2 和 3。

0

我通过打开要生成 9patch 图像的图像编辑器(Photoshop / Paint .NET)并将画布大小在两个维度上增加 2 来快速生成。

做完这些,您就可以快速地绘制出拉伸和填充线。如果您需要为数百张图片生成 9patch,那么会有点麻烦,但每个项目只需要进行一次即可。我想象不出有多少项目需要生成如此多的 9patch,以至于需要花费很长时间...

如果您真的想简化流程,您可以从您的 9patch 中删除填充指示器,并使用 style 属性将它们添加到您的视图中...

如果我的设计师尝试直接在 Illustrator 中制作 9patch,则无法使用脚本进行导出,因为 1 像素线也会被缩放,不再是 1px。

这一行让我有点担心 - 您不应该将 mdpi 图像放大到 hdpi,这没有任何意义。如果只有一个 mdpi 图像可用,则会自动在运行时对其进行缩放。


就像我说的那样,我有20-25个按钮需要进行9-patches处理,每个状态和每种密度类型都需要。这是一个大项目,设计可能会有所发展,因此我需要比这种方法更快的东西。关于1像素线条的问题,他使用矢量图形处理。 - Chayy
如果您在同一应用程序中有20-25种按钮样式,除非您正在进行某种用户确定的主题设置,否则您可能需要重新考虑... - Graeme
好的,按钮和其他需要进行九宫格处理的组件。是的,应用程序中有两种类型的用户,主题上也存在一些差异。还有大约80个活动。 - Chayy
仍然看起来相当高 - 我本来想象每个用户最多有3种按钮样式,否则我不知道你如何在整个应用程序中保持统一的感觉,但这都取决于你而不是我。祝你好运!希望你能找到一个合理的程序来完成它。 - Graeme

0

我主要使用9-patch图案来绘制按钮和其他视图的背景。其中大部分是单色背景,带有某种2像素分隔符,还有一些是带有分隔符的渐变色。我将它们放在res\drawable-nodpi文件夹中,这是一个特殊的文件夹,指示Android不对其内容进行任何缩放。

到目前为止,我已经得到了预期的结果,没有任何问题。我的2像素分隔符在从ldpi到hdpi分辨率的几个设备上都是2个真实设备像素(而不是密度像素),这正是我想要的。

希望这可以帮助到您...


谢谢,我有时也会使用这个。但是对于像系统按钮那样更复杂的图像,我们需要在每个密度文件夹中提供9-patch,否则它会出现模糊。 - Chayy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接