谷歌地图标记使用的是矢量图形。

5

有没有一种方法可以使用矢量图形作为Google地图标记?我知道Google地图需要使用位图作为标记,但是我有一个来自服务器的矢量图形,不确定如何将其显示为标记。

谢谢


2
谁曾经点了踩,也许你可以花4秒钟说一下为什么。这是一个完全合理的问题。 - Snake
2个回答

1
如果你能将矢量图像渲染成可绘制的 Drawable,那么你就可以将其用作地图标记。Android 上的矢量 drawable 很复杂,但也许你已经解决了这个问题。
你需要以所需大小编程方式创建可写的 Bitmap(将常量大小指定为 dips 以调整到屏幕密度),创建基于该 Bitmap 的 Canvas,在 Drawable 上设置边界,然后在 Canvas 上绘制它。然后,你的 Bitmap 将包含 Drawable 的渲染结果,你可以从中创建一个 Marker。

那么这就是我的问题,我该如何使这个向量图可绘制呢? :) 我缺少矢量图形和 Android 可理解的图形之间的联系。 - Snake
@Snake Android自Lollipop版本开始支持VectorDrawables(SVG文件的子集)。或者,更适合目前情况的是,您可以使用免费的SVG解析库,该库将从标准SVG文件返回可绘制对象。 - Phantômaxx
没有完美的SVG解析库,您应该针对最低可能的SVG配置文件以最大化兼容性:首选SVG Tiny或SVG Basic。您还可以使用“MrVector”库或即将使用支持库在旧版本上获得VectorDrawable兼容性。我不知道您的服务器接受或返回哪种格式,但您最好的选择是让服务器执行位图转换。 - BladeCoder
它肯定不会接受Android的专有“VectorDrawable”。AndroidSvg或SvgAndoid是处理SVG标准格式的有效替代方案。 - Phantômaxx

0
但我有一个矢量图形文件,不确定如何实现? 在您的矢量绘图应用程序中打开它,导出为位图(PNG)以在Android上使用。 这比其他任何方式都更少痛苦。

我希望事情是那样的:)。问题在于它来自服务器,因此它是由用户上传的。我将澄清问题,因为“文件可能会误导”。 - Snake
1
也许您的服务器可以将其呈现为位图?在 Android 上使用矢量图形非常麻烦,因为大多数系统方法都期望位图。但是,您可以创建自己的自定义视图并呈现矢量图形(或者可能已经有这样的第三方组件,您需要搜一下)。 - Marcin Orlowski
我想使用矢量图形的主要原因是为了节省下载所需的空间。这将是涉及多个图像(精灵表之类)的动画。如果我从服务器使用图像,那么下载它们将会成为问题,因为它们有很多。使用矢量图形“应该”是一种指示系统如何绘制它们的数学方法,因此它应该更小。 - Snake
实际上,除非显示的图像非常大,否则在“矢量图像”和PNG或WebP文件之间不会获得太多带宽。但是,解码复杂的矢量图像在移动设备上非常昂贵,因此您将损失很多CPU功率。此外,我不知道有任何支持动画的矢量格式,除了仅在Android Lollipop中支持并且需要非常严格的格式的AnimatedVectorDrawable。 - BladeCoder
@BladeCoder FYI:你可以在SVG中使用动画。 - Marcin Orlowski
@MarcinOrlowski 对不起,我的意思是:除了AnimatedVectorDrawable之外,我不知道有任何在Android上能够工作的动画SVG格式。 - BladeCoder

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