Почему мои наложения на карте не отображаются? - PullRequest
2 голосов
/ 01 марта 2010

Я следовал инструкциям из учебника Google hellomapview. Я получаю рабочий вид карты и т. Д. Но два элемента, добавленные на карту, не отображаются. Кажется, они где-то есть, потому что при нажатии на указанное место отображается сообщение, которое было добавлено к элементам.

Редактировать

Вот мой исходный код. Это должно быть очень близко к исходному коду учебника Google.

public class MapOverlay extends ItemizedOverlay<OverlayItem> {

private List<OverlayItem> overlays = new ArrayList<OverlayItem>();
private Context context;

public MapOverlay(Drawable defaultMarker, Context context) {
    super(defaultMarker);
    overlays = new ArrayList<OverlayItem>();
    this.context = context;
}

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

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

public void addOverlay(OverlayItem overlay) {
    overlays.add(overlay);
    this.populate();
}

@Override
protected boolean onTap(int index) {
  OverlayItem item = overlays.get(index);
  AlertDialog.Builder dialog = new AlertDialog.Builder(this.context);
  dialog.setTitle(item.getTitle());
  dialog.setMessage(item.getSnippet());
  dialog.show();
  return true;
}

}

public class MapsActivity extends MapActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);

    MapOverlay overlay = new MapOverlay(this.getResources().getDrawable(
            R.drawable.androidmarker), this);

    overlay.addOverlay(new OverlayItem(new GeoPoint(19240000,-99120000), "Blubb", "See?"));
    mapView.getOverlays().add(overlay);
}

@Override
protected boolean isRouteDisplayed() {
    return false;
}
}

Доступен ли где-нибудь исходный код из учебника Google?

Ответы [ 2 ]

8 голосов
/ 02 марта 2010

Проблема в том, что я забыл установить границы рисования. Кажется, что если карта не знает, как выровнять изображение, она вообще не будет отображаться.

Я изменил первую строку в конструкторе с:

super(defaultMarker);

до

super(boundCenterBottom(defaultMarker));

и знаю, что он отлично работает.

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

В то же время я понятия не имею, как помочь вам напрямую.

Здесь ссылки на различные выпуски проекта, которые определенно работают с оверлеями, возможно, они помогут.

...