安卓系统上的SVG支持

82

安卓支持SVG吗?有示例吗?


1
阅读此文:http://code.google.com/p/android/issues/detail?id=1376(读至结束)。 - ankitjaininfo
2
截至2012年10月5日,被接受的答案是不正确的。 - Brian Webster
7个回答

56
最完整的答案如下:
  • Android 2.x默认浏览器不支持SVG。
  • Android 3+默认浏览器支持SVG。

要在平台的2.x版本中添加对SVG的支持,有两个基本选择:

  1. 安装更强大的浏览器(如Firefox或Opera Mobile,两者都支持SVG)。
  2. 使用可以解析SVG并将其呈现到HTML5画布中的JavaScript polyfill。

如果你只是想让SVG在个人使用或有限(可控制的)用户集上工作,第一种选择还好。但如果你想在面向大量、不受控制的用户群体时使用SVG,则这不是一个很好的选择。

在后一种情况下,你需要使用polyfill。今天有许多JavaScript库可以解析SVG并呈现到canvas上。以下是其中的两个示例:

使用polyfill,你可以在所有Android 2.x版本上将SVG渲染到canvas上。

关于这种方法的更全面的示例,你可以参考这篇博客文章,讨论了使用canvg polyfill在Android 2.x上使Kendo UI DataViz图表(基于SVG)工作的方法。希望有所帮助!


你好,我想知道在ImageView中是否可以在运行时更改svg图像的颜色? - Shreyash Mahajan

22

现在有一个新的开源库支持加载和绘制SVG基础1.1文件:https://github.com/pents90/svg-android。由于实际绘图是由android.graphics.Picture对象本地处理,因此性能很好。


9
在我的回答中,我提到了一个库,它可以让开发者在他们的应用程序中加载和渲染SVG文件。Android 3+增加了对SVG的浏览器支持,但并没有在其开发API中支持SVG。 - pents90
很遗憾,这个在Android 4.3上对我没用。示例图像最终为空白。我正在使用维基教程页面中的确切代码。 - BVB
2
@BVB,您需要关闭硬件加速才能在Android 4.x上运行。请参见:https://dev59.com/TGPVa4cB1Zd3GeqP4Uob和https://dev59.com/2F_Va4cB1Zd3GeqPPQYL。 - pents90
谢谢,但这样做不会在其他地方产生负面影响吗? - BVB
您可以在需要关闭它的视图中关闭它。然而,我同意Canvas.drawPicture()在Android 4.x中已经失效,并且没有为开发人员提供任何补救措施,这是令人沮丧和悲伤的。 - pents90
显示剩余4条评论

8

1
向后兼容支持库中的矢量图形可绘制对象:https://developer.android.com/reference/android/support/graphics/drawable/VectorDrawableCompat.html - Leos Literak

8

现在有一个正在积极开发中的新库androidsvg,它允许将SVG图像直接合并到项目中。它的优点是定义了SVGImageView,可以直接将SVG合并到布局XML中。

最后,在Android中包含SVG非常简单。

更多详细信息请参见:Stack Overflow帖子


这个SVG库真的很好用。svg-android及其分支没有应用我在组中为子元素定义的样式/CSS。但是这个库可以。谢谢。 - domenukk

1
我知道我的解决方案有些强硬,但它非常有效,不需要任何外部库(至少在您的最终代码中不需要),而且非常快速。
1)只需使用现有的SVG加载库,例如svg-android-2(它是另一个答案中提到的svg-android的分支,具有更多功能和错误修复):https://code.google.com/p/svg-android-2/ 2)编写一个简单的应用程序,除了加载和显示SVG图像外,什么也不做。
3)修改SVG加载库,以便打印创建Picture类的Java代码或将其保存在String变量中。
4)将以这种方式获得的Java代码复制粘贴到您正在编写的应用程序中。
要获取有关此技术的更多信息并下载示例源代码,请访问我的博客: http://androiddreamrevised.blogspot.it/2014/06/transforming-svg-images-into-android.html 你可以在Google Play这里获取此技术的工作示例: https://play.google.com/store/apps/details?id=pl.bartoszwesolowski.svgtodrawablesample 以下是使用此技术创建的商业应用程序示例(米兰地铁地图): https://play.google.com/store/apps/details?id=pl.bartoszwesolowski.atmmetroplan 注意,即使放大地图,加载速度也很快,看起来也非常漂亮。

0

0

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