Несколько элементов наложения в Android - PullRequest
1 голос
/ 19 марта 2010

У меня возникли проблемы с использованием ItemizedOverlay и OveralyItems.

Я могу получить первый оверлейный элемент, который появится на карте, но не какие-либо элементы после этого.

Пример кода включен: http://www.anddev.org/multiple_overlay_items-t12171.html

Краткий обзор здесь:

public class Markers extends ItemizedOverlay {

 private Context ctx;

 private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

 public Markers(Drawable defaultMarker, Context cont) {

      super(boundCenterBottom(defaultMarker));
      this.ctx = cont;
      // TODO Auto-generated constructor stub
 }

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

 @Override
 public boolean onTap(GeoPoint p, MapView mapView) {
      // TODO Auto-generated method stub
      return super.onTap(p, mapView);
 }


 @Override
 protected boolean onTap(int index) {
      // TODO Auto-generated method stub
      Toast.makeText(this.ctx, mOverlays.get(index).getTitle().toString()+", Latitude: "+mOverlays.get(index).getPoint().getLatitudeE6(), Toast.LENGTH_SHORT).show();
      return super.onTap(index);         
 }

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

 public void addOverlay(OverlayItem item) {
      mOverlays.add(item);
      setLastFocusedIndex(-1);
      populate();

 }

 public void clear() {
      mOverlays.clear();
      setLastFocusedIndex(-1);
      populate();
 }
}

Примеры использования:

Markers usersMarker = new Markers(user,overview.this); 
GeoPoint p = new GeoPoint((int) (lat * 1E6),(int) (lon * 1E6));
OverlayItem item = new OverlayItem(p,userData[0],userData[3]);
item.setMarker(this.user);
usersMarker.addOverlay(item); 

первый маркер появляется на карте, но если я добавлю больше, они не появятся? Есть ли проблема с методом populate ()? Я попытался вызвать его вручную после добавления всех маркеров, но это все равно не помогло. Пожалуйста, если у вас есть идеи, что может быть не так, скажите.

Ответы [ 3 ]

5 голосов
/ 20 марта 2010

проверьте этот образец проект это помогает.добавить несколько addOverlay () на ваш несколько раз

1 голос
/ 20 марта 2010

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

Так что я никогда не удосужился посмотреть или уменьшить масштаб ... когда я обнаружил, что мой другой маркер сидит где-то в море Бэррена :) Спасибо всем, кто пытался мне помочь ... о, и приведенный выше код работает :)

1 голос
/ 20 марта 2010

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

...