在Android Beta 0.9中使用ItemizedOverlay和OverlayItem
时间:2020-03-05 18:42:53 来源:igfitidea点击:
有没有人设法在Android Beta 0.9中使用ItemizedOverlays
?我无法使其正常工作,但是我不确定是否做错了什么或者该功能尚不可用。
我一直在尝试使用ItemizedOverlay
和OverlayItem
类。它们的预期目的是模拟地图标记(如Google Maps Mashups中所示),但是在将它们显示在地图上时遇到了问题。
我可以使用类似的技术添加自己的自定义叠加层,只是ItemizedOverlays
无效。
一旦实现了自己的ItemizedOverlay
(并覆盖了createItem),创建类的新实例就可以了(我可以从中提取OverlayItems),但是将其添加到地图的Overlay列表中并不会使其看起来应该。
这是我用来将ItemizedOverlay类作为Overlay添加到我的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组中重复有关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的演示中毫不掩饰地删除。另请参阅此处以获取良好的操作方法。