【问题标题】:Android NinePatch .png file format?Android NinePatch .png 文件格式?
【发布时间】:2010-04-26 22:10:28
【问题描述】:

Android NinePatch 图像似乎是带有额外信息的标准 .png 文件。是否有任何地方的格式规范,因为我希望能够在其他平台上实现它?

【问题讨论】:

    标签: android file-format nine-patch


    【解决方案1】:

    This 是我在该主题上找到的最直接的链接。

    【讨论】:

    • 更改为已接受的答案,因为此链接提供了有关可拉伸与填充边框功能的更好信息。
    【解决方案2】:

    只需在图像查看器中查看9 patch 图像即可。它只是一个 1 像素的边框,黑色像素位于可拉伸区域的两侧,并透明标记静态部分。

    如果放大此图像,您可以看到标记可拉伸区域的黑色边框:

    example http://web6.twitpic.com/img/91916457-a53b6866db73378bda07c039151c69aa.4bd6119a-full.png

    【讨论】:

    • 我希望有一个文档化的规范,但我想这已经足够了!
    • 我认为不需要更多文档,因为它只是一个带有 1 像素边框的普通 png。
    • 我不完全清楚 1 像素边框的解释方式,尤其是非连续像素选择,以及上下边距之间的差异。
    • 根据我的经验,每个边距对(上/下和左/右)必须相同,否则会阻止您的应用程序编译。 IE。选择必须是连续的。这只是将图像分成四个静态角,而黑色像素标记的剩余区域是可拉伸的。
    • 隐形直升机你错了。各方都是独立的。每边最多可以有 5 个部分。 ___ _ ___ ____ _ 例如,将是有效的顶部缩放。
    【解决方案3】:

    出于多种原因,我强烈建议您不要在其他平台上实现 9patch 系统。

    我已经使用 Android 的开发者工具一年了,并且大量使用了 9patch 文件。

    他们是一场噩梦。 PNG 不是数据格式,它是一种图像格式。在 .9.png 文件中混合这两者是自找麻烦。

    9patch 文件不是一个好主意,因为它们将图像和数据格式合并到一个文件中,设计人员和开发人员都无法完全管理。

    九个补丁文件:您会在维护、支持和更新阶段的某个时候后悔自己的参与。

    也许如果在将来某个日期对 9patch 文件的支持被添加到许多质量工具中(例如,PS CS4 不将 9patch 文件理解为特定格式,它也不遵守有效的九个补丁格式的规则。 )

    用于九个补丁文件的现有工具非常糟糕——在我雇用的大多数设计师看来,基本上无法使用。

    【讨论】:

    • +1 表示强烈的观点 - 我同意这些工具不是很好。但是,鉴于我需要“可扩展”图像的 9 补丁功能,我还有什么选择?重新发明*可能会更笨。
    • 我认为 9-patch 概念是一个以最糟糕的方式实现的非常好的想法的例子。另一种方法是使用 PNG 文件(行业标准)和包含 4 个维度的 XML 格式。 Stretch X、Stretch Y、Pad X 和 Pad Y。然后,使用自定义解析器(XML 而不是 PNG),然后操作 PNG 来拉伸它。这样一来,您的 PNG 仍然可以重复用于其他事情(并且可以在 photoshop 中使用),并且您的布局市场是 XML,程序员可以轻松地使用它。
    • 我完全不同意科里的观点。我已经在 Photoshop 中使用 9-patch PNG 已有 10 个月了,它们的工作就像一个魅力。事实上,使用这种技术,我的 UI 看起来很清晰,太棒了!
    • 我认为人们不理解他们。
    • 我发现支持所有数据九个补丁的类远远优于Android使用的“in-PNG”格式。我已经在 J​​ava 中实现了这个yannickloriot.com/library/ios/cccontrolextension/Classes/…,现在两全其美。简洁的 UI,没有任何 PNG 或 9patch 格式的开销。
    【解决方案4】:

    这个链接对于android中的九个补丁图像非常有用。

    这是 android 中非常有用的示例。仅使用 .9 补丁 PNG 文件。

    http://blogingtutorials.blogspot.com/2010/12/android-nine-patch-example.html

    【讨论】:

      【解决方案5】:

      现代浏览器支持基于 CSS 9 路径的背景: http://www.css3.info/preview/border-image/

      【讨论】:

      • 不错的链接,介绍文本激发了 9 个参数;所以 9 补丁是对 9 个感兴趣区域的明确定义,用于将位图放置到画布的坐标中?
      【解决方案6】:

      我发现这个链接非常有用:link to blog post。它为创建 9 补丁时定义的不同边界使用了一些示例。它显示了如何使用额外信息来缩放图像的尺寸 (x,y)。

      Richard L. 最后甚至有一个很好的评论,它说明了如何通过在边界中包含中断来添加要防止缩放图像的区域;例如。不缩放图像中的部分。

      【讨论】:

        【解决方案7】:

        搞了一会儿才明白9补丁文件的扩展名应该是xxxx.9 而不是 xxx.9.png

        【讨论】:

        • 在这种情况下,它完全忽略了 9 个补丁数据