我正在尝试这样做,当位置被更改时,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();
}
}
答案 0 :(得分:2)
就像您将叠加层添加到Mapview一样,您可以删除上一个叠加层:
mapView.getOverlays().remove(oldUsersLocationIcon);
当您获得新位置时,请拨打mapView.Invalidate()
如果您没有跟踪旧位置,请使用:
mapView.getOverlays().clear();
清除MapView上的所有叠加项目
答案 1 :(得分:1)
如果您只想删除最后一个覆盖项目,可以通过
删除mapView.getOverlays().remove(mapView.getOverlays().size()-1);
然后调用以下方法重新绘制地图
mapView.Invalidate()