2 votes

Comment mettre à jour un overlay Android itemisé qui est affiché sur une carte

J'ai une superposition personnalisée qui devrait se déplacer lorsque l'utilisateur (joueur) se déplace. Mais de la manière dont je l'ai actuellement, elle continue simplement à ajouter de plus en plus de superpositions, ce qui donne à l'icône un effet de traînée.

J'ai essayé de supprimer la superposition à chaque mise à jour de l'emplacement mais il semble qu'elle ne soit pas supprimée. Cependant, je ne suis pas sûr que la supprimer soit le bon moyen pour accomplir ce que j'essaie de faire. Existe-t-il un moyen de simplement mettre à jour l'emplacement et rafraîchir la carte?

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

Toute orientation serait grandement appréciée.

14voto

Robby Pond Points 37875

Pourquoi ne pas simplement utiliser MyLocationOverlay? Cela fera tout pour vous. Assurez-vous simplement d'appeler disableMyLocation() dans onPause.

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

De toute façon, vous n'avez pas besoin d'obtenir la Mapview, mapOverlays, drawable, et de créer un nouvel itemizedOverlay à chaque fois. Cela ne doit être fait qu'une seule fois dans votre onCreate ou autre. Ce que vous devez faire, c'est simplement mettre à jour l'OverlayItem lorsque la position change, puis appeler mapView.invalidate() pour redessiner la vue.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X