Google Maps Android API v2(曲线折线)中的自定义绘图

时间:2014-07-16 14:48:01

标签: android google-maps google-maps-android-api-2

我有一个MapView(由谷歌地图Android API v2提供),我想要实现的应该足够简单,只需绘制一个弯曲的Polyline

具体来说,我有一个LatLng s的数组,而不是让它们以锐角连接,我想让路线很好地完成,这样通过点的线就会跟随曲线而不是直线和锐角。

现在,过去可以在旧的Google Maps API中创建自定义Overlay,覆盖draw(),然后手动绘制到地图上(例如使用自定义PaintPath具有所需的设置。)

不幸的是,在v2中,Google已经删除了Overlay类并转移到更高级别的抽象,这些抽象不再提供draw()方法的访问权限。 PolylineOptions是相当基本的,并没有提供绘制曲线的任何选项。

有没有办法覆盖draw()或使用Google Maps API v2的其他功能来绘制弯曲的Polyline

关于这个问题已经有一些关于SO的问题,但是到目前为止还没有真正令人满意的答案:

Custom Overlays in Google Maps API v2

Overrinding draw() in customized MapView in Google Maps Android API v2

我确定必须是一种在Google Maps v2上进行自定义绘图的方法,同时创建自定义叠加层View并在坐标同步后绘制到其上地图是一个选项,在处理缩放和平移地图时会很快变得非常复杂,所以如果可能的话,这是我想要避免的。

1 个答案:

答案 0 :(得分:0)

我开发了一个抽象类CanvasTileProvider(),你只需要覆盖onDraw方法,就像往常一样将你的绘图执行到Canvas中。 TileProjection对象另外传递给onDraw方法,可帮助您在LatLng和Canvas上的点之间进行来回计算。 唯一的限制是,瓷砖通常只加载一次。因此,这种绘制到地图中的方式适用于不经常更改的形状。因此,如果您的LatLng对象数组不断变化(例如,因为它显示了设备的当前移动),它可能不合适。

您可以在this SO question

的答案中找到CanvasTileProvider类