我有一个MapView
(由谷歌地图Android API v2提供),我想要实现的应该足够简单,只需绘制一个弯曲的Polyline
具体来说,我有一个LatLng
s的数组,而不是让它们以锐角连接,我想让路线很好地完成,这样通过点的线就会跟随曲线而不是直线和锐角。
现在,过去可以在旧的Google Maps API中创建自定义Overlay
,覆盖draw()
,然后手动绘制到地图上(例如使用自定义Paint
和Path
具有所需的设置。)
不幸的是,在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
并在坐标同步后绘制到其上地图是一个选项,在处理缩放和平移地图时会很快变得非常复杂,所以如果可能的话,这是我想要避免的。
答案 0 :(得分:0)
我开发了一个抽象类CanvasTileProvider(),你只需要覆盖onDraw方法,就像往常一样将你的绘图执行到Canvas中。 TileProjection对象另外传递给onDraw方法,可帮助您在LatLng和Canvas上的点之间进行来回计算。 唯一的限制是,瓷砖通常只加载一次。因此,这种绘制到地图中的方式适用于不经常更改的形状。因此,如果您的LatLng对象数组不断变化(例如,因为它显示了设备的当前移动),它可能不合适。
您可以在this SO question
的答案中找到CanvasTileProvider类