25

我想创建一个在某些平面图上显示位置的应用程序。导航是以某种方式通过 WiFi 实现的,我已经完成了,所以现在我在显示平面图时遇到了问题。

它可能是某种矢量格式,在上网一段时间后我决定它必须是 svg 文件。我找到了一些解决方案,但它对我不起作用!

  1. 库 svg-android

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

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

  2. 阿帕奇蜡染

    乍一看,很好的解决方案,但是有一个问题。Android 有一些“本机”apache 库,当我尝试使用 batik 做某事时,它会抛出NoClassDefFoundError,因为它不是在 batik 库中搜索,而是在“本机”库中搜索。

    当然,我们可以在我们的项目中添加源代码,只对.svg文件使用 batik 解析器并以某种方式对其进行编辑,但是有很多工作,同样成功我们可以编写自己的解析器。

  3. 小线

    没有试用版,但如果我们看到它如何用于 svg 文件和 android 的描述,我们会看到只有此类文件的光栅化,仅此而已。

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

4

4 回答 4

11

我建议使用#1。不要编写自己的解析器。这将是一个巨大的头痛。

您的平面图必须有多详细?android-svg 很好地支持 SVG。它只是对过滤器或光源没有很好的支持。您的 SVG 中不会包含这些(我希望如此)。

如果您不想这样做,请查看四叉树。您可以渲染出一个巨大的图像并将其分解为类似四叉树的格式,然后只加载您需要的四边形。

于 2012-07-18T07:00:43.680 回答
4

我为 android 编写了一个 SVG libaray,该网站是 http://www.vectoroid.com

缺少的主要是 SVG arc 支持,目前已修复,并将在不久的将来发布。

我正在寻找有关它的反馈,因为我已经研究了大约一年。所以如果你有任何请告诉...

于 2012-09-26T17:10:31.240 回答
1

我已经为 Android使用了另一个SVG ;似乎它是比较新的。

GPLv3、CSS2 支持、字体、文本和跨度、线性和径向渐变、SVG 和 SVGZ、初始过滤支持、来自资产的图像、来自 Web 和内联 base64 编码的图像。我尝试过的最快的。

当然过滤器支持可能会更好,但除此之外它运行良好,甚至可以显示 20 兆字节的 SVG 文件。

于 2015-09-29T13:54:11.127 回答
0

成功测试了这两个库:

https://github.com/BigBadaboom/androidsvg - Apache 许可证 2.0

https://scand.com/products/svgkit-android/ - 需要调整以使用现代 SDK 进行编译(抑制警告,更新 gradle 文件);LGPL / 商业

到目前为止,androidsvg 看起来更好。

于 2020-07-30T18:34:07.333 回答