Android中的9-patch图像错误

每当我尝试添加9修补程序映像到我的项目中的\ drawable文件夹,我得到相同的错误:

ERROR: 9-patch image C:\...\res\drawable\appwidget.9.png malformed. Frame pixels must be either solid or transparent (not intermediate alphas). Found at pixel #3 along top edge. Failure processing PNG image C:\...\res\drawable\appwidget.9.png 

在这个例子中,奇怪的是我已经从sdk资源中find的“android-g1-icon”图像中获得了这个图像,所以应该是没问题的。 到目前为止我已经尝试过的任何9-patch图像都发生了同样的情况。 什么可能是错的?

我在Android Studio上遇到了同样的问题:

 AAPT out(943142208) : No Delegate set : lost message:Done AAPT err(943142208): ERROR: 9-patch image /Users/cartman/Github/UteacherAndroid/RefactorDemo/app/src/main/res/drawable-xxhdpi/nav_shabow.9.png malformed. AAPT err(943142208): Frame pixels must be either solid or transparent (not intermediate alphas). AAPT err(943142208): Found at pixel #1 along left edge. 

这是我解决它的方法:在您的Android Sdk目录下打开draw9patch工具

 cd /Android/sdk/tools ./draw9patch 

打开.9 png并再次保存。 希望能帮助到你。

这是最新的adt是20.0.3的问题。 您可以改为将* .9.png重命名为* .png并开始工作。 我认为这只是adt的bug,因为对于18.0.0版本adt它不会提示这种types的错误,并且正常工作

资源编译器将9像素的图像块贴上一个像素的边界(大概是将存储在.9.png文件之外的信息以更高效的方式存储起来)。 如果您将.9.png文件从.apk文件中取出,则需要手动添加边框。

当我将Eclipse项目移植到Android Studio时,我遇到了同样的问题。

你需要做的是,从图像文件名中删除.9,然后,在draw9patch工具(位于/ sdk / tools目录下)中打开它,现在,单击右上angular的Show Bad Patchesbutton。

你应该看到坏的像素和红色的区域,你需要在那里做一些工作,直到你没有红色坏的补丁。 对于我来说,我只在中间左边缘标记了一个像素,在中间上边缘标记了一个像素,标记了几乎所有的右边缘和下边缘。 再次点击button,看到你没有坏的补丁。

将该文件保存为.9.png并将其放回到项目的res文件夹中。 然后,Android Studio应该为9个补丁程序库构build您的项目。

现在有两个在Android构build工具,aapt和java cruncher的png cruncher。 两者都检查格式不正确的9个补丁映像。

我已经查看了构build工具的源代码,没有选项来禁用9补丁映像上的压缩或忽略格式错误。 至less选项不可用于用户。

所以这里是一个简单的脚本来取代aapt。

https://gist.github.com/ksc91u/37513796b2cec37bb3c5

当被调用来压缩9个补丁映像时,它将简单地复制该文件,否则,它将用@ARGV启动真正的aapt。

在我的情况下,我错误地将黑色边框延伸到左上angular。 确保angular落是透明的。

如果使用在线生成器工具制作图像,则必须从名称中删除任何特殊字符才能使其工作。

对我来说,问题似乎是我自己创build了9个补丁。 我认为在左边和上边有一个1px的边框就足够了,但是你需要确保图像的每一边都有一个1px的边框。

只是为了logging:对我来说,原来这个错误来自右侧站点和下侧的黑色边框线。 所以我在每一边都有一个黑色的边框(顶部,右边,底部和左边)。 去除冗余的右边和底线工作就像一个魅力。

当出现错误时,它也会在android studio中打开图像。 我所做的所有解决这个问题的方法是通过单个绘制像素来扩展任何补丁边界。 我重新运行,它的工作。 不知道为什么,但我重复testing了几个图像。

你的9补丁可能是错误的。 也许你的条纹9-补丁一个像素的边界,从他们获得的信息不可用。 尝试添加文字的底线和右边。 我认为这将有助于解决您的问题。

当我们修补任何图像时,它会在其边框上创build黑线。该边框应该是透明的或完整的。 如果不是这个错误会来的。 所以解决办法是增加宽度和高度2个像素(在Photoshop中增加canvas的大小而不是图像)

我已经通过更改Android Studio中的拉伸范围来解决它

我发现这个问题是关于* .9.png文件。 打开并检查所有9-Patch文件,确保所有文件都有黑色1像素宽的边框,如果没有,只需单击白色的地方并添加它,然后保存。

这是我的问题的唯一解决scheme。

Interesting Posts