2011-03-21 57 views
2

我有一個自定義疊加層,它應該隨着用戶(玩家)的移動而移動。但我現在擁有的方式只是不斷添加越來越多的疊加層,使圖標具有尾隨效應。如何更新顯示在地圖上的Android分項疊加層

我試圖刪除每個位置更新上的覆蓋圖,但似乎沒有刪除它。雖然,我不確定是否實際刪除它是完成我想要做的事情的正確方法。有沒有辦法更新位置並刷新地圖?

public void drawMeOnMap() 
{ 
    MapView mapView = (MapView) findViewById(R.id.mapView); 
    mapOverlays = mapView.getOverlays(); 
    drawable = this.getResources().getDrawable(R.drawable.p18); 
    itemizedOverlay = new IOverlay(drawable); 

    if (mapOverlays.contains(itemizedOverlay)) 
    { 
     mapOverlays.remove(itemizedOverlay); 
    } 

    GeoPoint point = new GeoPoint((int)(1E6*player.latitude), (int)(1E6*player.longitude)); 
    OverlayItem item = new OverlayItem(point, "", ""); 
    itemizedOverlay.addOverlay(item); 
    mapOverlays.add(itemizedOverlay); 
} 

任何指導將不勝感激。

+0

你有沒有使用MyLocationOverlay的位置應用程序的優秀例子 - 我發現的例子並不是很有用,你可以看到我並不完全瞭解它。 - 你知道嗎,我一定是腦子裏一直盯着這個問題太久,Google上的前三個結果看起來很有前途。 – aitee 2011-03-21 17:58:35

回答

14

爲什麼不使用MyLocationOverlay?它會爲你做這一切。請確保在onPause中撥打disableMyLocation()

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

在任何情況下,你並不需要得到的MapView,mapOverlays,繪製,並創建一個新的itemizedOverlay各一次。這應該只在你的onCreate或其他方面完成一次。你應該做的只是在位置改變時更新OverlayItem,然後調用mapView.invalidate()來重繪視圖。

GeoPoint point = new GeoPoint((int)(1E6*player.latitude), (int)(1E6*player.longitude)); 
OverlayItem item = new OverlayItem(point, "", ""); 
itemizedOverlay.clear(); 
itemizedOverlay.addOVerlay(item); 
mapView.invalidate(); 
+0

我開始時並不知道MyLocationOverlay。我看到了一個帶有itemizedOverlay的例子,並使用它。我應該能夠很容易地將它轉換爲MyLocationOverlay和Itemized版本嗎? – aitee 2011-03-21 17:56:42

+0

MyLocationOverlay是否允許您爲標記使用自定義圖像? 該應用程序將有玩家(一個是你),其餘的都通過從服務器下載位置放在地圖上。 – aitee 2011-03-21 18:22:49

+0

不,但您可以重寫drawMyLocation()方法以使用您自己的drawable。 – 2011-03-21 18:27:48

相關問題