【问题标题】:Custom drawing in Google Maps Android API v2 (curved Polyline)Google Maps Android API v2(曲线折线)中的自定义绘图
【发布时间】:2014-07-16 14:48:00
【问题描述】:

我有一个MapView(由 Google Maps Android API v2 提供),我想要实现的目标应该足够简单,即绘制一个弯曲的Polyline。

具体来说,我有一个LatLngs 数组,而不是让它们以锐角连接,我想让路线很好地四舍五入,以便通过点的线遵循曲线而不是直线和锐角。

现在,这曾经可以在旧的 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 并在坐标与地图同步后在其上绘图是一种选择,在处理缩放和平移地图时会很快变得非常复杂,所以我想尽可能避免。

【问题讨论】:

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


    【解决方案1】:

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

    可以在this SO question的回复中找到CanvasTileProvider类

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 2015-02-18
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      相关资源
      最近更新 更多