android地图中的移动标记

android地图中的移动标记,android,android-mapview,android-maps,Android,Android Mapview,Android Maps,我想在地图视图中移动标记。首先,我喜欢这样: public void moveMarker(Marker marker, int lng, int lat) { if (marker == null) { return; } String key = marker.getKey(); OverlayItem item = (OverlayItem) markers.get(key); GeoPoint point = new

我想在地图视图中移动标记。首先,我喜欢这样:

public void moveMarker(Marker marker, int lng, int lat) {       
    if (marker == null) {
        return;
    }
    String key = marker.getKey();
    OverlayItem item = (OverlayItem) markers.get(key);
    GeoPoint point = new GeoPoint(lat, lng);
    GeoPoint oldPoint = item.getPoint();
    if (oldPoint.getLatitudeE6() == point.getLatitudeE6()
            && oldPoint.getLongitudeE6() == point.getLongitudeE6()) {
        return;
    }
    overlay.removeOverlay(item);
    OverlayItem newItem = new OverlayItem(point, marker.getTitle(), marker
            .getSnippet());
    newItem.setMarker(marker.getIcon());
    overlay.addOverlay(newItem);
    mapView.postInvalidate();
    markers.put(key, newItem);

}
是的,这个有效。但当一个标记移动时,其他标记会刷新。因此,我修改代码如下:

public void moveMarker(Marker marker, int lng, int lat) {
    if (marker == null) {
        return;
    }
    String key = marker.getKey();
    MarkerOverlay overlay = markers.get(key);
    OverlayItem item = overlay.getItem(0);
    GeoPoint point = new GeoPoint(lat, lng);
    GeoPoint oldPoint = item.getPoint();
    if (oldPoint.getLatitudeE6() == point.getLatitudeE6()
            && oldPoint.getLongitudeE6() == point.getLongitudeE6()) {
        return;
    }
    mapOverlays.remove(overlay);
    MarkerOverlay overlayN = null;
    if (marker instanceof CarMarker) {
        CarMarker cm = (CarMarker) marker;
        overlayN = new CarMarkerOverlay(null, mapView, cm.getCarId());
    } else if (marker instanceof Marker) {
        overlayN = new MarkerOverlay(null);
    }
    OverlayItem newItem = new OverlayItem(point, marker.getTitle(),
            marker.getSnippet());
    newItem.setMarker(marker.getIcon());
    overlayN.addOverlay(newItem);
    mapOverlays.add(overlayN);
    markers.put(key, overlayN);
    mapView.postInvalidate();
}
这是我想要的。但有一个问题,每次标记移动时,它都会删除标记Overlay并重新创建它,它是否效率低下?提前谢谢! 名为markers和mapOverlays的变量定义:

private Map<String, MarkerOverlay> markers = new ConcurrentHashMap<String, MarkerOverlay>();
private List<Overlay> mapOverlays = null;
mapOverlays = mapView.getOverlays();
public class MarkerOverlay extends ItemizedOverlay<OverlayItem>{}
public class CarMarkerOverlay extends MarkerOverlay {}
私有映射标记=新的ConcurrentHashMap();
私有列表mapOverlays=null;
mapOverlays=mapView.getOverlays();
某些类别定义:

private Map<String, MarkerOverlay> markers = new ConcurrentHashMap<String, MarkerOverlay>();
private List<Overlay> mapOverlays = null;
mapOverlays = mapView.getOverlays();
public class MarkerOverlay extends ItemizedOverlay<OverlayItem>{}
public class CarMarkerOverlay extends MarkerOverlay {}
public类MarkerOverlay扩展了ItemizedOverlay{}
公共类CarMarkerOverlay扩展了MarkerOverlay{}