2012-05-24 3 views
0

У меня есть MapActivity, где я получаю текущее местоположение, и я нажимаю на него. Дело в том, что при изменении моего местоположения (onchangedlocation method) на карте появляется другая точка, но первая не исчезает. Другая проблема заключается в том, что onchangedlocation не выталкивает еще один чертеж, пока я не коснусь экрана. Что я должен сделать, чтобы сразу появиться. Я хочу показать с этой возможностью текущее местоположение автомобиля, чтобы он двигался правильно, как GPS или что-то в этом роде.Несколько чертежей на моем текущем месте

Вот моя деятельность, с которой я добавляю точную точку.

public class CustomPinpoint extends ItemizedOverlay<OverlayItem>{ 


private ArrayList<OverlayItem> pinpoints = new ArrayList<OverlayItem>(); 
private Context c; 


public CustomPinpoint(Drawable defaultMarker) { 
    super(boundCenter(defaultMarker)); 
    // TODO Auto-generated constructor stub 
} 
public CustomPinpoint(Drawable m, Context context) { 
    // TODO Auto-generated constructor stub 
    this(m); 
    c = context; 
} 

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



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

public void insertPinpoint(OverlayItem item){ 
    pinpoints.add(item); 
    this.populate(); 
} 
    } 

и я использую это в моем OnCreate метод:

lm= (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     Criteria crit = new Criteria(); 

     towers = lm.getBestProvider(crit, false); 
     final Location location = lm.getLastKnownLocation(towers); 

     if(location != null){ 
      latit = (int) (location.getLatitude() *1E6); 
      longi = (int) (location.getLongitude() *1E6); 
      ourLocation = new GeoPoint(latit, longi); 
      controller.animateTo(ourLocation); 
      controller.setZoom(14); 

      if//myItemizedOverlay.addItem(ourLocation, "myPoint1", "myPoint1"); 
      OverlayItem overlayItem = new OverlayItem(ourLocation, "What's up", "2nd String"); 
      CustomPinpoint custom = new CustomPinpoint(d, Map.this); 
      custom.insertPinpoint(overlayItem); 
      overlayList.add(custom);} 
      map.setSatellite(false); 
      map.setStreetView(true); 

и это мой onlocationchanged

public void onLocationChanged(Location l) { 
    // TODO Auto-generated method stub 
    latit = (int) (l.getLatitude() *1E6); 
    longi = (int) (l.getLongitude() *1E6); 
    GeoPoint ourLocation = new GeoPoint(latit, longi); 
    OverlayItem overlayItem = new OverlayItem(ourLocation, "What's up", "2nd String"); 
    CustomPinpoint custom = new CustomPinpoint(d, Map.this); 
    custom.insertPinpoint(overlayItem); 
    overlayList.add(custom); 
} 

Я думал, что для множества вводимого коэффициента на моем текущем местоположении решение будет для отображения только последней точечной точки (геоинформации), но я действительно не знаю, как это сделать.

Буду очень признателен, если вы могли бы помочь мне с обоими проблемами. Спасибо !

PS: Мне нужно, чтобы он выглядел так, будто он движется по-прежнему, когда устройство находится в машине или что-то, что идет с некоторой скоростью.

ответ

1

Я не вижу определение overlayList в вашем коде, но я предполагаю, что это должно быть типа ArrayList<OverlayItem>

Итак, прежде чем overlayList.add (под заказ) вам нужно вызвать overlayList.clear(). Это оставит вас с маркером последней позиции. Что касается обновления дисплея, я бы подумал, что он должен это делать, когда вы .add. Я полагаю, вы всегда можете позвонить .invalidate() на карте, чтобы узнать, помогает ли это

3
In the onlocationchaged method,add the following line,so that it will make your previous pin disappear..if(!mapOverlays.isEmpty()) 
{ 
mapOverlays.clear(); 
mapView.invalidate();}