我的初始情况与你所描述的完全相同。
当您看到地图图块时,显然缺少一些在地图上看到的位置:
1.你需要一个地点。
我认识到仅通过 DDMS 视图向模拟器设置地理位置是不够的。您必须在每次 DDMS 中明确按下“发送”按钮才能触发模拟器上的位置更新。
(只是提一下:在真实的设备上,您有时需要走一点才能使您的设备获得位置更新;),我很生气,直到我四处走动思考现在该做什么^^)
2.您需要使用正确的 OverlayItem 正确实现 ItemizedOverlay。
我写了自己的覆盖,有点“复杂”。如果您不确定您的实施是否正确,请使用本指南以最少的更改创建实施地图视图教程 Android 开发者 http://developer.android.com/resources/tutorials/views/hello-mapview.html
或使用这个:
private class MyItemizedOverlay extends ItemizedOverlay {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public MyItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
}
private void updateLocationOverlay() {
if (location == null) { return };
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.XXXX);
MyItemizedOverlay myItemizedOverlay = new MyItemizedOverlay(drawable);
GeoPoint point = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
myItemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(myItemizedOverlay);
}
我想特别指出,您必须在可绘制对象上调用boundCenter或boundCenterBottom。否则不会被绘制。如果您在同一个覆盖层中使用overlayItem.setMarker 的不同标记,也要小心,您也在那里调用它。
3.您必须将地图上的视图移动到您的点。你可以这样实现:
MapController mapController = mapView.getController();
mapController.setCenter(point)
我认识到该功能地图控制器.zoomToSpan不起作用。 (至少对我来说,我仍在开发这个应用程序)。也许它与动画到。我没有尝试。设置中心工作。 (还有设置缩放级别)。
也许我提到的几点可能会导致您的地图无法按您想要的方式工作。
祝你好运!
编辑:我忘了提及,即使它可以通过 ddms 发送获取有效位置(在设备上是真实的,在模拟器上是假的),我仍然收到工厂客户端错误。我暂时忽略。