Android Studio 3.0 矢量图和 LINT 工具:ignore="VectorPath"

30
升级到3.0版后,Android Studio开始抱怨矢量可绘制图形中的长路径。 警告如下: 非常长的矢量路径(7958个字符),对性能不利。考虑减少精度、删除一些细节或将矢量光栅化。使用长矢量路径会影响性能。有几种方法可以缩短pathData:*使用更少的精度*删除一些细节*使用Android Studio矢量转换工具*将图像光栅化(转换为PNG)。 文档https://developer.android.com/guide/topics/graphics/vector-drawable-resources.html向我们展示了如何在应用程序中使用矢量可绘制图形,并建议使用它来替代png等格式。 我既使用了Android Studio矢量转换工具,也使用了这个优秀的服务将SVG转换为矢量可绘制图形:http://inloop.github.io/svg2android/ 是否有其他服务可以更好地减少矢量可绘制图形的复杂性?在哪里可以找到关于我的矢量可绘制图形可以有多“高级”的指导方针?

1
我刚刚在一小时前发布了一款名为avdo的矢量图形优化工具。你可能会觉得它很有用! - Alex Lockwood
5个回答

31

尝试使用avocado优化矢量可绘制对象吧!这将有助于减少路径的复杂性。


6
它将尺寸缩小了10.5%,但不幸的是,一些路径仍然根据lint来说太长了。是否有一种方法可以拆分这些路径或其他方式解决?或者我应该使用png格式?其中一个路径包含1595个字符。 - Michael Vescovo
减小文件大小,路径不变。 - RajaReddy PolamReddy
阅读此文章一次。 - VishalJha

12

我的路径大约有1800,我使用svg-path-editor将其缩减至约1000。仍然显示警告,但非常接近最大值800。

我相信有更好的使用此工具的方法,但我只是从Android Studio XML中复制了pathData到路径框中,按下“Round”按钮并将结果返回给XML。

如果您的路径超过2000,请考虑转换为PNG(带有mdpi、hdpi、xhdpi等)。

输入图像描述


8

在使用svg2android之前可以添加一个额外的步骤,即通过svgo运行它。

我使用的一个示例流水线如下(请注意,我使用的是svg2vectordrawable而不是Web工具)

~$ svgo image.svg --config=config -o image.svg.optimized
~$ s2v "image.svg.optimized image.xml

我的config文件看起来像这样(您可以根据需要进行调整):

"plugins": [
    {
        "convertPathData": {
            "leadingZero": false,
            "floatPrecision": 2
         }
    }
]

1
这是一个非常好的提示!非常感谢! - Ove Stoerholt
1
必须存在 leadingZero,否则会得到 InvalidVectorPath 的警告。 - TWiStErRob
1
"leadingZero": false 取消前导零优化,这会使得你的最终结果包含前导零。 - marianosimone

7
尝试使用此工具,通过减少“精度”来降低 这个工具 的使用。

3
这个工具对我没用。它可以将文件大小减少85%,但是会导致“Error inflating class ImageView”错误。当我取消“删除隐藏元素”选项时,它避免了膨胀错误,但是文件只能减少20%,这仍然不足以避免lint警告。 - Elletlar
它对我起作用了,但是生成的图像质量不够好。 - Malachiasz

3
这可能不是一个理想的解决方案,但最初我将矢量资源作为一个单独的对象绘制,这导致了更长的<path>问题。我重新开始,并将我的对象分成许多部分,即我逐个绘制了单个对象的每个部分,然后将它们组合在一起(我使用Inkscape)。结果,当.svg转换为.xml时,单个<path>标签被拆分为多个较短的<path>标签。

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