Удалить последний нарисованный из OverlayItem в Google Maps API? - PullRequest
0 голосов
/ 08 октября 2011

Я пытаюсь сделать так, чтобы при изменении местоположения рисованный объект печатался в местоположении пользователя, и он отлично работал, но когда местоположение менялось во второй раз, чертежный материал из первого местоположения все еще виден. Я хочу, чтобы отображалось только последнее местоположение, а не все места, где местоположение изменилось.

Я попытался удалить overlayItem при запуске метода onLocationChanged и снова назначить overlayItem при вызове location, но это не сработало.

Вот код для onLocationChanged

public void onLocationChanged(Location location) {
    if (location != null) {     
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        userLocation = new GeoPoint((int) lat * 1000000, (int) lng * 1000000);


        OverlayItem usersLocationIcon = new OverlayItem(userLocation, null, null);
        LocationPin myLocationPin = new LocationPin(userIcon, MainActivity.this);
        myLocationPin.getLocation(usersLocationIcon);
        overlayList.add(myLocationPin);
    }

}

А вот код для класса LocationPin

import java.util.ArrayList;

import android.content.Context;
import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class LocationPin extends ItemizedOverlay<OverlayItem>{

    private ArrayList<OverlayItem> locationPoint = new ArrayList<OverlayItem>();
    private Context context;


    public LocationPin(Drawable arg0) {
        super(boundCenter(arg0));
        // TODO Auto-generated constructor stub
    }

    public LocationPin(Drawable marker, Context context) {
        this(marker);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected OverlayItem createItem(int i) {
        // TODO Auto-generated method stub
        return locationPoint.get(i);
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return locationPoint.size();
    }

    public void getLocation(OverlayItem item){
        locationPoint.add(item);
        this.populate();
    }

}

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

Точно так же, как вы добавили наложение в MapView, вы удаляете предыдущее наложение следующим образом:

mapView.getOverlays().remove(oldUsersLocationIcon);

, когда вы получаете новое местоположение, тогда вы звоните mapView.Invalidate()

ЕслиВы не отслеживали старые местоположения:

mapView.getOverlays().clear();

, чтобы очистить все элементы наложения в MapView

1 голос
/ 08 октября 2011

Если вы хотите удалить только последний оверлейный элемент, вы можете удалить его

mapView.getOverlays().remove(mapView.getOverlays().size()-1);

и затем вызовите метод ниже, чтобы перерисовать вашу карту

mapView.Invalidate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...