Как обновить наложение Android Itemized, которое отображается на карте - PullRequest
2 голосов
/ 21 марта 2011

У меня есть пользовательское наложение, которое должно перемещаться по мере движения пользователя (игрока). Но, как я понял, он просто добавляет все больше и больше наложений, заставляя иконку иметь конечный эффект.

Я пытался удалить наложение при каждом обновлении местоположения, но, похоже, оно не удаляется. Хотя я не уверен, что удаление - это правильный способ выполнить то, что я пытаюсь сделать. Есть ли способ просто обновить местоположение и обновить карту?

    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);
}

Любое руководство будет с благодарностью.

1 Ответ

14 голосов
/ 21 марта 2011

Почему бы вам просто не использовать MyLocationOverlay ?Это сделает все это для вас.Обязательно вызовите disableMyLocation() в onPause.

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

В любом случае вам не нужно каждый раз получать MapView, mapOverlays, drawable и каждый раз создавать новый 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();
...