9

目的: 我想最好使用 ImageView 来显示 SVG 图像文件。

尝试1:

  • 我正在使用svg-android库来做到这一点。

  • 我按照他们的教程逐字逐句。我只是将他们的代码复制粘贴到我的 onCreate 中,从 onCreate 中注释掉我的应用程序代码。

    在此之前我有一个启动画面,但我怀疑无论如何都会干扰这个。在任何情况下,我都会更改启动意图并发布更新。

  • 我已将他们的 jar 添加到 libs 文件夹并引用它。

结果1:

我正在测试三星 Galaxy I93000(国际版)

我得到的只是一个白屏。

没有编译或运行时错误。

Logcat输出如下:

01-13 01:22:11.755: D/dalvikvm(24889): GC_FOR_ALLOC freed 52K, 7% free 12198K/12995K, paused 17ms, total 17ms
01-13 01:22:11.765: I/dalvikvm-heap(24889): Grow heap (frag case) to 17.000MB for 4642816-byte allocation
01-13 01:22:11.810: D/dalvikvm(24889): GC_CONCURRENT freed 1K, 5% free 16730K/17543K, paused 15ms+2ms, total 43ms
01-13 01:22:12.080: D/dalvikvm(24889): GC_FOR_ALLOC freed <1K, 5% free 16731K/17543K, paused 13ms, total 13ms
01-13 01:22:12.100: I/dalvikvm-heap(24889): Grow heap (frag case) to 21.928MB for 5168972-byte allocation
01-13 01:22:12.125: D/dalvikvm(24889): GC_CONCURRENT freed <1K, 4% free 21779K/22599K, paused 12ms+2ms, total 25ms
01-13 01:22:12.560: D/libEGL(24889): loaded /system/lib/egl/libEGL_mali.so
01-13 01:22:12.595: D/libEGL(24889): loaded /system/lib/egl/libGLESv1_CM_mali.so
01-13 01:22:12.600: D/libEGL(24889): loaded /system/lib/egl/libGLESv2_mali.so
01-13 01:22:12.605: D/(24889): Device driver API match
01-13 01:22:12.605: D/(24889): Device driver API version: 10
01-13 01:22:12.605: D/(24889): User space API version: 10 
01-13 01:22:12.605: D/(24889): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012 
01-13 01:22:12.670: D/OpenGLRenderer(24889): Enabling debug mode 0

更新1:

我尝试将显示 SVG 图形的活动作为清单中的主要活动。结果没有变化。

更新 2:

尝试另一种库/方法来做到这一点 - ImageView with SVG Support。将返回结果。

更新 3:

如您所知,我已经了解了Android 上的 SVG 支持。那里的答案并没有真正提供本机解决方案。一种解决方法是创建静态 html 页面,每个 svg 一个,引用 SVG js 库。这似乎根本无法维护。我会成为人们在查看遗留代码时诅咒的人。

正如您可能已经猜到的那样,上述试验的效果并不好。

4

2 回答 2

18

您可能已经找到了解决方案,但供将来参考:

我正在测试三星 Galaxy I93000(国际版)

我得到的只是一个白屏。

没有编译或运行时错误。

您可能需要为正在使用的 ImageView 禁用硬件加速:

imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

我在 svg-android 的一个分支上遇到了同样的问题,这完全是由于硬件加速造成的。

于 2013-06-10T17:00:05.343 回答
4

好的,经过一个完整的不眠之夜,这就是我所拥有的。:)

希望1:

* TPSVG_Android_SVG_Library: *这是我使用的,即我的批准印章;))

试过这个有福的人的图书馆。像魅力一样工作。他从 View 扩展了他的自定义视图,因此您拥有大部分用于布局的基本参数。它只有一个贡献者。我有点反对在生产中使用它,至少在长期的基础上。但对他的工作表示敬意,非常感谢,因为它满足了我的迫切需要。

这个用法很简单,我将粗略地描述一下。

  • 以 zip 格式下载 repo 并将其导入 eclipse
  • 将其作为库项目添加到您的项目中(项目属性 - > Android)
  • 在 onCreate 中像这样使用它:

    SVGView svgView = (SVGView)this.findViewById(R.id.svgImage); SVGParserRenderer 图像 = 新的 SVGParserRenderer(this, R.raw.anime); svgView.setSVGRenderer(image, null); svgView.setBackgroundColor(Color.WHITE);

  • 我使用 FrameLayout 来定位它。需要大量试验和错误,因为这不会出现在 Android 的 WYSIWYG 编辑器中。您可以暂时将其替换为 ImageView 并处理格式。

  • 此标签中使用的任何不属于 View 类的参数都会导致编译错误

问题:我还没有完全弄清楚如何在运行时在此视图上切换可绘制对象(SVG)。如果有人知道这一点,请发布程序。

希望2:

类向量:

这似乎很有希望。他们有一些基于矢量的应用程序以及库。我不太清楚如何使用它来加载 SVG 可绘制对象(似乎还不支持)。可是等等!他们的博客上,他们说他们已经实现了“SVG to drawable”,并将很快发布。耶!

于 2013-01-13T01:19:40.690 回答