从Google Maps API中删除OverlayItem中的最后一个drawable?

时间:2011-10-08 09:18:41

标签: android google-maps

我正在尝试这样做,当位置被更改时,drawable被打印到用户位置并且它工作完美但是当第二次更改位置时,第一个位置的可绘制仍然可见。我想只在位置发生变化时显示最新位置而不是所有位置。

我尝试在onLocationChanged方法的启动时删除overlayItem,并在调用location时再次分配overlayItem,但它不起作用。

以下是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 个答案:

答案 0 :(得分:2)

就像您将叠加层添加到Mapview一样,您可以删除上一个叠加层:

mapView.getOverlays().remove(oldUsersLocationIcon);

当您获得新位置时,请拨打mapView.Invalidate()

如果您没有跟踪旧位置,请使用:

mapView.getOverlays().clear();

清除MapView上的所有叠加项目

答案 1 :(得分:1)

如果您只想删除最后一个覆盖项目,可以通过

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

然后调用以下方法重新绘制地图

mapView.Invalidate()