在 Android Beta 0.9 中使用 ItemizedOverlay 和 OverlayItem
-
09-06-2019 - |
题
有没有人成功使用过 ItemizedOverlays
在 Android Beta 0.9 中?我无法让它工作,但我不确定我是否做错了什么或者此功能是否尚不可用。
我一直在尝试使用 ItemizedOverlay
和 OverlayItem
类。它们的预期目的是模拟地图标记(如 Google 地图混搭中所示),但我在让它们出现在地图上时遇到了问题。
我可以使用类似的技术添加我自己的自定义叠加层,这只是 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 群组在这里.
看来,如果你在可绘制对象上设置界限,它就会起作用:
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 上的演示. 。另外,这里有一个 好方法.
不隶属于 StackOverflow