2014-07-16 152 views
1

我有一個MapView(由Google Maps提供的Android API v2)以及我想要實現的應該足夠簡單,這簡直就是以繪製彎曲的Polyline谷歌地圖自定義繪圖Android API v2(弧形折線)

具體而言,我有一組LatLng s,而不是讓它們以銳利的角度連接,我希望路線很好地四捨五入,以便通過這些點的線遵循一條曲線而不是直線和銳角。

現在,這種所使用的老谷歌地圖API中可以通過手動創建自定義Overlay,覆蓋draw(),然後(用自定義PaintPath與所需的設置例如)繪製到地圖上。

不幸的是,Google似乎在第2版中刪除了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

我開發了一個抽象類CanvasTileProvider(),您只需要重寫onDraw方法,以便像往常一樣執行繪圖到Canvas中。此外,傳遞給onDraw方法的TileProjection對象可幫助您在LatLng和Canvas上的點之間進行來回計算。 唯一的限制是,瓷磚通常只裝載一次。所以這種繪製到地圖中的方式適用於不頻繁變化的形狀。因此,如果您的LatLng對象數組不斷變化(例如,因爲它顯示設備的當前移動),它可能不適用。

您可以在答案中找到CanvasTileProvider類this SO question