在Android Beta 0.9中使用ItemizedOverlay和OverlayItem

有没有人设法在Android Beta 0.9中使用ItemizedOverlays ? 我不能让它工作,但我不知道如果我做错了什么,或者如果这个function尚不可用。

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

我可以添加我自己的自定义覆盖使用类似的技术,它只是ItemizedOverlays不工作。

一旦我实现了我自己的ItemizedOverlay (和重载的createItem),创build我的类的新实例似乎工作(我可以从中提取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; } } 

为了完整起见,我将在这里的Android Groups上重复关于Reto的post的讨论。

看来,如果你设置可绘制的界限,它的诀窍是:

 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。