Как динамически изменить положение наложения на основе данных GPS - PullRequest
0 голосов
/ 06 июня 2011

У меня есть приложение, в котором я пытаюсь смоделировать отслеживание в реальном времени, поэтому я читаю некоторые данные GPS из класса, в котором я сохранил данные, и пытаюсь поместить эти точки на карту, а также я добавляю маркерна текущую позицию.

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

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

Надеюсь, вы можете мне помочь!

Это мой код:

public void onCreate(Bundle savedInstanceState)
{
   marker = getResources().getDrawable(R.drawable.comet);
   marker.setBounds(0,0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
}

---------------- Я используюАсинхронный поток для чтения данных GPS -------------------------

protected Void doInBackground(Void... voids) 
{
   while (true) {
     longitude = ServerManager.getInstance().getLastLongitude();
     latitude = ServerManager.getInstance().getLastLatitude();
     p = new GeoPoint(latitude, longitude);
     publishProgress(p);
    }
  }

  protected void onProgressUpdate(GeoPoint... progress1) 
  {
    mapView.getOverlays().add(new SitesOverlay(marker,progress1[0]));
  }
}

Наконец, это мой класс, который добавляет болеележит:

private class SitesOverlay extends ItemizedOverlay<OverlayItem> 
{
    private List<OverlayItem> items = new ArrayList<OverlayItem>();
    private Drawable marker = null;
    GeoPoint gp1;

    public SitesOverlay(Drawable marker,GeoPoint gp1)
    {
       super(marker);
       this.marker = marker;
       this.gp1=gp1;
       items.add(new OverlayItem(gp1,"Your location", "You are here!"));
       populate();
    }

    @Override
    protected OverlayItem createItem(int i) 
    {
       return (items.get(i));
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    {
        super.draw(canvas, mapView, shadow);
        boundCenterBottom(marker);
    }

    @Override
    public int size() 
    {
      return (items.size());
    }
}

1 Ответ

0 голосов
/ 06 июня 2011

Если вы используете:

mapView.getOverlays().add(new SitesOverlay(marker,progress1[0]));

, то вы также можете использовать:

mapView.getOverlays().remove(i);

mapView.getOverlays () возвращает массив оверлеев, которые должны быть нарисованы.Вы можете изменить этот массив в любое время.Подробнее здесь: http://code.google.com/intl/pl-PL/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html#getOverlays()

...