关于java:在Android Beta 0.9中使用ItemizedOverlay和OverlayItem

关于java:在Android Beta 0.9中使用ItemizedOverlay和OverlayItem

Using ItemizedOverlay and OverlayItem In Android Beta 0.9

是否有人设法在Android Beta 0.9中使用ItemizedOverlays? 我无法使其正常工作,但是我不确定是否做错了什么或该功能尚不可用。

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

我可以使用类似的技术添加自己的自定义叠加层,只是ItemizedOverlays无效。

一旦实现了自己的ItemizedOverlay(并覆盖了createItem),创建类的新实例似乎就可以了(我可以从中提取OverlayItems),但是将其添加到地图的Overlay列表中就不会了。 使其看起来应有的样子。

这是我用来将ItemizedOverlay类作为Overlay添加到我的MapView上的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 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定义为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
  }
}

为了完整起见,我将在此处的Android组中重复有关Reto的讨论。

看来,如果在可绘制对象上设置边界,就可以达到目的:

1
2
3
4
5
6
7
8
9
10
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的演示中毫不客气地撕了下来。 另外,这是一个很好的方法。


尝试:

1
2
3
4
5
6
7
Drawable defaultMarker = r.getDrawable(R.drawable.icon);

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

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


推荐阅读