2013-05-08 56 views
8

背景:Android地圖API第1版到第2個遷移

我繼承別人的問題,我試圖讓一個應用程序啓動和運行。多個開發者已經放棄了這個項目,現在輪到我了。我是交易的iOS開發者,但我有一些簡單的Android項目完成。

該問題的應用程序是一個原生的android最初與API級別7建成,並圍繞谷歌地圖api版本1沉重。我沒有訪問原始密鑰,所以我似乎被迫升級到谷歌地圖版本2.

我已經建立了一個新的活動,超出了獲取功能圖的基本教程。那裏沒有問題,但我被GeoPoint等項目封鎖,似乎無法找到更換它的更多信息。

我的問題是這樣的:

有沒有從API版本1移動到API版本2的遷移路徑還是我必須重新編碼整個地圖的組成部分? GeoPoints,自定義引腳和覆蓋層包括在內?

回答

12

可悲的回答是Google Map API V1的大部分對象都被Google Map中的新對象API V2所取代。

例如,而不是使用GeoPoints您將使用Latlng分。疊加層也不見了,用PolylinesPolygones取代。

看看這個答案我給這裏:

Convert Android App that uses maps API V1 to Maps Android API V2

,看一看在這個博客帖子我寫了,將讓你開始在你的應用谷歌地圖API V2實現:

Google Map API V2

因此,您可以理解大部分代碼應該被重寫以適應Google Map API V2。

+1

+1。從v1遷移到v2是一項重大任務。幸運的是,v1中很多很難的事情在v2中很容易實現。 – 2013-05-08 02:10:44

+2

埃米爾,過去幾天我一直是你博客上的常客。謝謝你從一個隨機的互聯網人。 – warpedspeed 2013-05-08 02:13:01

+0

@warpedspeed,歡迎你。如果您有任何其他問題,歡迎您在這裏或博客上發佈。 – 2013-05-08 02:15:42

0

當轉到Maps API for Android的v2版本時,您會立即注意到這是一個全新的API,很少考慮向後兼容性。

您會看到很多編譯錯誤,因爲現在很多現有類將會像MapActivity,GeoPoint,RecticleDrawMode和Overlay一樣丟失。

新對象全部包含在com.google.android.gms.maps。*包中。

  • 用戶位置

Android地圖V1

在地圖V1,使用MyLocationOverlay以檢測用戶的位置

List overlaysoverlays = mapView.getOverlays(); 
MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView); 
myLocationOverlay.enableMyLocation(); 
overlays.add(myLocationOverlay); 

Android地圖v2的

您可以激活秀我的位置在地圖上按鈕很容易像這樣:

googleMap.setMyLocationEnabled(true); 

我的位置按鈕將出現在只有當啓用了我的位置層屏幕的右上角。當用戶單擊該按鈕時,如果用戶的位置當前已知,則攝像機會將動畫集中在用戶的當前位置。

  • 高亮標記

高亮標記變得非常簡單。更改標記圖標已成爲一個單線程。

Android地圖V1

private void highlightMarker(int index) { 
Drawable d = getResources().getDrawable(R.drawable.pin_green); 
Rect copyBounds = overlay.getMarker(0).copyBounds(); 
d.setBounds(copyBounds); 
overlay.setMarker(d); 
SitesOverlay sitesOverlay = (SitesOverlay) map.getOverlays().get(0); 
sitesOverlay.refresh(); 
} 

Android地圖v2的

private void highLightMarker(int index) { 
Marker marker = markers.get(index)) 
marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)); 
} 

更多步驟的壞消息check this tutorial