在 Android 中显示 SVG 文件

26
我希望创建一个应用程序,可以在某个楼层平面图上显示位置。导航通过WiFi实现,在某种程度上已经完成,现在我有一个显示楼层平面图的问题。
它可能是以某种矢量格式存在,经过一段时间的互联网搜索,我决定它必须是svg文件。我找到了一些解决方案,但对我来说并不起作用!
  1. Library svg-android

    有机会显示 .svg 文件,但只能显示“简单”的文件。它仅适用于教程中的文件,而不适用于任何其他 .svg 文件(例如,您使用 Inkscape 创建的其他文件)。

    因此,我决定解析 .svg 文件,从中制作DOM,以某种方式获取对象和属性,并通过OpenGL ES绘制它。

  2. Apache Batik

    乍一看,这是一个非常好的解决方案,但存在问题。Android有一些“本地”Apache库,当我尝试使用batik时,它会抛出 NoClassDefFoundError,因为它不是在batik库中搜索,而是在“本地”库中搜索。

    当然,我们可以将源代码添加到我们的项目中,仅拿取 batik 解析器的 .svg 文件并对其进行编辑,但这需要大量的工作,同样成功的话,我们可以编写自己的解析器。

  3. Tiny Line

    没有试用版,但是如果我们查看说明关于它如何处理svg文件和安卓,我们会发现只有这些文件的光栅化,仅此而已。

有没有比编写自己的解析器更好的解决方案?有人遇到过这个问题吗?


另一个选项 - http://stackoverflow.com/a/30213340/3325759 - Mikelis Kaneps
一篇旧帖子,但是对于那些最终到达这里的人可能会参考 https://www.tutorialkart.com/kotlin-android/android-draw-svg-to-canvas-example/,该文章使用了 AndroidSVG 第三方库。 - Mallikarjun M
4个回答

11

我建议使用#1。不要自己编写解析器,那只会让你头疼不已。

你的平面图需要多详细?android-svg支持SVG得相当好,只是对于滤镜或光源的支持不是很强。我希望你的SVG里没有这些元素。

如果你不想这么做,可以尝试研究四叉树。你可以渲染出一个大的图像,然后将其分解成四叉树的格式,最后只加载你需要的那些四叉树即可。


我认为 "android-svg" 不存在,它可能是 "androidsvg" 或者 "svg-android"。 - Christian
我可以推荐"androidsvg"作为比"svg-android"更完整的库。Google code(发布时将在几个月后下线)和Bitbucket链接。许可证列在源文件中,似乎是Apache 2.0。 - William
我发现Greenrobot的androidsvg调整库更好。compile 'de.greenrobot:androidsvg:1.2.2-beta-1-tweaked-2' - inteist

4

我为安卓编写了一个SVG库,网站是http://www.vectoroid.com

目前缺少的主要功能是SVG弧形支持,这个问题已经得到解决,并将在不久的将来发布。

我正在寻求反馈意见,因为我已经开发了一年左右。如果你有任何建议请告诉我...


感谢您编写这个库所付出的努力。我想在我的应用程序中使用您的库,但我不确定它是否符合我的要求。我想编写一种自由绘图应用程序,可以保存用户绘制的SVG路径,并交互式地检查当前用户手指的位置并相应地执行一些代码。您的库是否支持这种功能? - frogatto

2
我一直在使用另一种SVG for Android;似乎这是相对较新的。它支持GPLv3、CSS2、字体、文本和跨度、线性和径向渐变、SVG和SVGZ、初始过滤器支持、来自资源、网络和内联base64编码图像的图像。从我试过的所有选项中速度最快。当然,过滤器支持可能会更好,但除此之外它运行良好,甚至可以显示20兆字节的SVG文件。

2

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