每当我尝试将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资源中找到的“android-g1-icon”图像中获得了这个图像,所以它应该没问题。到目前为止,我尝试过的任何9补丁图像都是如此。可能有什么不对?
答案 0 :(得分:31)
我在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并再次保存。希望它有所帮助。
答案 1 :(得分:21)
这是最新的ADT 20.0.3的问题。您可以将* .9.png重命名为* .png并开始工作。
我认为这只是ADT的错误,因为对于18.0.0版本的ADT,它不会提示此类错误并且工作正常。
答案 2 :(得分:11)
资源编译器剥离9个补丁一个像素的边界(并且可能在.9.png文件之外以更有效的方式存储从它们获得的信息)。如果您从.apk中删除了这些.9.png文件,则需要手动添加边框。
答案 3 :(得分:8)
当我将项目表单Eclipse迁移到Android Studio时,我遇到了同样的问题。
您需要做的是,从图像文件名中删除.9,然后在draw9patch工具(位于/ sdk / tools目录中)中打开它,现在,单击右上角的Show Bad Patches按钮。
然后您应该看到标记为红色的坏像素和区域,您需要在那里做一些工作,直到您没有红色坏补丁。对我来说,我只在中间左边缘标记了一个像素,在中间上边缘标记了一个像素,并且几乎标记了所有右边缘和底边缘。再次单击按钮,看到您没有错误的补丁。
将文件另存为.9.png并将其放回项目的res文件夹中。然后,Android Studio应该为9个补丁程序构建您的项目没有问题。
答案 4 :(得分:4)
现在Android构建工具中有两个PNG crunchers,AAPT和一个Java cruncher。两者都检查格式错误的9个补丁图像。
我已经查看了构建工具的源代码。没有选项可以禁用9补丁映像上的压缩或忽略格式错误的映像。至少没有用户可用的选项。
所以这是一个替换AAPT的简单脚本:
https://gist.github.com/ksc91u/37513796b2cec37bb3c5
当调用压缩9补丁图像时,它将简单地复制文件,否则,它将使用@ARGV启动真正的AAPT。
答案 5 :(得分:3)
在我的情况下,我错误地将黑色边框延伸到左上角。确保角落是透明的。
答案 6 :(得分:2)
如果您使用在线生成器工具制作图像,则必须从名称中删除任何特殊字符才能使其生效。
答案 7 :(得分:1)
仅供记录: 对我来说,事实证明这个错误来自右侧站点和底部的黑色边界线。所以每侧都有一个黑色边框(顶部,右侧,底部和左侧)。删除冗余的右侧和底线就像一个魅力。
答案 8 :(得分:1)
对我来说,问题似乎是我自己创建了9补丁。我认为在左边和顶边有一个1像素的边框就足够了,但是你需要确保图像的边缘有1个边框。
答案 9 :(得分:0)
当错误出现时,它也会在android studio中打开图像。我所做的就是用一个绘制的像素扩展任何补丁边框。我重新跑了,它运作了。不知道为什么,但我用几张图片重复测试了这个。
答案 10 :(得分:0)
你的9补丁可能是错误的。
也许你会剥离9个补丁一个像素的边界,并且从中获取的信息不可用。尝试为文本添加底线和右线。我认为这将有助于解决您的问题。
答案 11 :(得分:0)
当我们对任何图像进行修补时,它会在其边框处创建一条黑线。边界应该是透明的或完全坚固的。如果不是,则会出现此错误。
因此解决方案是将宽度和高度增加两个像素。 (在Photoshop中增加画布的大小,而不是图像。)
答案 12 :(得分:0)
我已通过更改Android Studio中的拉伸范围解决了这个问题。
答案 13 :(得分:0)
我发现问题是关于* .9.png文件。打开并检查所有9-Patch文件,确保所有文件都有黑色1像素宽边框,如果没有,只需单击白色位置并添加,然后保存。
这是解决我问题的唯一方法。