Использование ItemizedOverlay и OverlayItem В Android Beta 0.9

голоса
49

Кто - нибудь сумел использовать ItemizedOverlaysв Android Beta 0.9? Я не могу заставить его работать, но я не уверен , если я сделал что - то неправильно , или если эта функция не доступна.

Я пытался использовать ItemizedOverlayи OverlayItemклассы. Их целевое назначение заключается в имитации маркеры на карте (как видно в Google Maps Mashups) , но у меня были проблемы с получением их появляться на карте.

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

После того, как я реализовал мой собственный ItemizedOverlay(и переопределить CreateItem), создавая новый экземпляр моего класса , кажется, работает (я могу извлечь OverlayItems из него) , но при добавлении его в списке Наложение компонентов карты не делает вид , как это должно быть.

Это код , я использую , чтобы добавить ItemizedOverlayкласс в качестве наложения на мой MapView.

// Add the ItemizedOverlay to the Map
private void addItemizedOverlay() {
  Resources r = getResources();
  MapView mapView = (MapView)findViewById(R.id.mymapview);
  List<Overlay> overlays = mapView.getOverlays();

  MyItemizedOverlay markers = new MyItemizedOverlay(r.getDrawable(R.drawable.icon));
  overlays.add(markers);

  OverlayItem oi = markers.getItem(0);
  markers.setFocus(oi);
  mapView.postInvalidate();
}

Где MyItemizedOverlayопределяется как:

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
  public MyItemizedOverlay(Drawable defaultMarker) {
    super(defaultMarker);
    populate();
  }

  @Override
  protected OverlayItem createItem(int index) {
    Double lat = (index+37.422006)*1E6;
    Double lng = -122.084095*1E6;
    GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());

    OverlayItem oi = new OverlayItem(point, Marker, Marker Text);
    return oi;
  }

  @Override
  public int size() {
    return 5;
  } 
}
Задан 25/08/2008 в 17:39
источник пользователем
На других языках...                            


1 ответов

голоса
38

Для полноты картины я повторю обсуждение поста Рето над на группах Android здесь.

Кажется, что если вы установите границы на вашем Drawable это делает трюк:

Drawable defaultMarker = r.getDrawable(R.drawable.icon);

// You HAVE to specify the bounds! It seems like the markers are drawn
// through Drawable.draw(Canvas) and therefore must have its bounds set
// before drawing.
defaultMarker.setBounds(0, 0, defaultMarker.getIntrinsicWidth(),
    defaultMarker.getIntrinsicHeight());

MyItemizedOverlay markers = new MyItemizedOverlay(defaultMarker);
overlays.add(markers);

Кстати, выше бесстыдно разорвал с демо на MarcelP.info . Также смотрите здесь для хорошего HOWTO.

Ответил 05/09/2008 в 20:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more