【问题标题】:SVG support on AndroidAndroid 上的 SVG 支持
【发布时间】:2011-04-22 20:06:46
【问题描述】:

Android 是否支持 SVG?有什么例子吗?

【问题讨论】:

标签: android svg


【解决方案1】:

最完整的答案是这样的:

  • Android 2.x 默认浏览器本身不支持 SVG。
  • Android 3+ 默认浏览器确实支持 SVG。

要将 SVG 支持添加到平台的 2.x 版本,您有两个基本选择:

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

如果您只是想让 SVG 用于个人用途或有限(可控)的用户集,则第一个选项是可以的。如果您想在面向不受控制的庞大用户群的同时使用 SVG,这不是一个很好的选择。

在后一种情况下,您想使用 polyfill。现在有许多 JavaScript 库可以使用 SVG 并渲染到画布上。两个例子是:

使用 polyfill,您可以在所有版本的 Android 2.x 上的 Canavs 中渲染您的 SVG。

有关此方法的更完整示例,您可以参考this blog post that discusses the use of the canvg polyfill 以使 Kendo UI DataViz 图表(基于 SVG)在 Android 2.x 上工作。希望对您有所帮助!

【讨论】:

  • 您好,我想知道ImageView,我是否能够更改该svg图像运行时的​​颜色?
【解决方案2】:

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

【讨论】:

  • 为了不被错过,我将在此处添加评论(如@Todd 的回答中所述)Android 3+ 确实支持 SVG。因此,如果开发人员不担心较旧的 Android 设备,则无需担心这些库。
  • 在我的回答中,我指的是使开发人员能够在其应用程序中加载和呈现 SVG 文件的库。 Android 3+ 添加了对 SVG 的浏览器支持,但在其开发人员 API 中支持 SVG。
  • 不幸的是,这个对我来说不适用于 Android 4.3。示例图像最终为空白。我正在使用 Wiki 教程页面中的确切代码。
  • @BVB 您需要关闭硬件加速才能在 Android 4.x 上运行。请参阅:stackoverflow.com/questions/10384613/…stackoverflow.com/questions/8771219/…
  • 谢谢,但这不会对其他地方产生负面影响吗?
【解决方案3】:

目前,包括我在内的一些人独立工作。
您可以在这些文章中找到有效的解决方案:
Android. ImageView with SVG Support.
Android ImageView and Drawable with SVG support

【讨论】:

    【解决方案4】:

    有一个新库(正在积极开发中)androidsvg,它允许将 svg 图像直接合并到项目中。它具有定义SVGImageView 的优点,它允许将svg 直接合并到布局xml 中。

    最后,在 android 中包含 svg 很简单。

    更多详情:Stack Overflow post

    【讨论】:

    • 这个 svg 库确实有效。 svg-android 和它的分叉没有应用我在一个组中为该组的孩子定义的样式/css。这个可以。谢谢。
    【解决方案5】:

    Android 支持矢量绘图:https://developer.android.com/reference/android/graphics/drawable/VectorDrawable.html

    还有一个 Android SVG 到 VectorDrawable 转换器: http://inloop.github.io/svg2android/

    【讨论】:

    【解决方案6】:

    我简要了解了https://code.google.com/p/androidsvg/。到目前为止显示了我扔给它的所有 svg 文件。看起来很有希望。

    【讨论】:

      【解决方案7】:

      我刚刚为我自己的 TPSVG 库收集了一个 Github 存储库和示例存储库,这些库最初是专门为我的应用程序创建的。

      https://github.com/TrevorPage/TPSVG_Android_SVG_Library

      https://github.com/TrevorPage/TPSVG_Example1

      【讨论】:

        【解决方案8】:

        我知道我的解决方案有点硬核,但效果很好,不需要任何外部库(至少在您的最终代码中不需要)并且速度非常快。

        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

        注意地图加载速度有多快以及它看起来有多漂亮,即使在放大的情况下也是如此。

        【讨论】:

          【解决方案9】:

          查看Support vector drawable。 Android Studio 有一个工具可以将 SVG 文件转换为 .XML 文件。

          将 AppCompat 与 ImageView(或 ImageButton 和 FloatingActionButton 等子类)一起使用时,您将能够使用新的 app:srcCompat 属性来引用矢量可绘制对象(以及 android:src 可用的任何其他可绘制对象):

          从 Android 支持库 23.3.0 开始,支持矢量可绘制对象只能通过 app:srcCompat 或 setImageResource() 加载

          【讨论】:

            【解决方案10】:

            Firefox for Android 支持 SVG。

            【讨论】:

              【解决方案11】:

              Opera Mobile for Android 支持 svg,Opera Mini 支持静态 svg 内容。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-09-16
                • 2016-09-20
                • 2012-03-12
                • 2014-06-13
                • 2013-02-23
                • 1970-01-01
                • 1970-01-01
                • 2020-04-13
                相关资源
                最近更新 更多