在 Android Beta 0.9 中使用 ItemizedOverlay 和 OverlayItem

2022-08-31 17:03:19

有没有人设法在Android Beta 0.9中使用?我无法让它工作,但我不确定我是否做错了什么,或者此功能是否尚不可用。ItemizedOverlays

我一直在尝试使用 和 类。它们的预期目的是模拟地图标记(如在Google Maps Mashup中看到的那样),但我在使它们显示在地图上时遇到问题。ItemizedOverlayOverlayItem

我可以使用类似的技术添加自己的自定义叠加,只是不起作用。ItemizedOverlays

一旦我实现了我自己的(并被覆盖),创建我的类的新实例似乎有效(我可以从中提取),但是将其添加到地图的列表中并不能使它按预期显示。ItemizedOverlaycreateItemOverlayItemsOverlay

这是我用来将类作为 on 添加到我的 .ItemizedOverlayOverlayMapView

// 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;
  } 
}

答案 1

为了完整起见,我将在这里的Android群组中重复对Reto帖子的讨论。

似乎如果您在可绘制对象上设置边界,它就可以解决问题:

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 的演示中扯了下来。另外,这是一个很好的操作方法


答案 2

尝试:

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

defaultMarker.setBounds(0, 0, defaultMarker.getIntrinsicWidth(),
    defaultMarker.getIntrinsicHeight());

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

推荐