我有一个GeoPoint gPt
,坐标为55.790833,坐标为49.114444。我将这个东西添加到地图并尝试居中。但我的标记不在地图的中心(它有点高)。
有什么问题?
这是我的代码:
mResourceProxy = new ResourceProxyImpl(this.getActivity().getApplicationContext());
mapView = (MapView) v.findViewById(R.id.mapview);
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
mMapController = mapView.getController();
mMapController.setZoom(15);
GeoPoint gPt = new GeoPoint(55.790833, 49.114444);
ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
items.add(new OverlayItem("Here", "SampleDescription", gPt));
mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int index,
final OverlayItem item) {
return true; // We 'handled' this event.
}
@Override
public boolean onItemLongPress(final int index,
final OverlayItem item) {
return false;
}
}, mResourceProxy);
mapView.getOverlays().add(this.mMyLocationOverlay);
mapView.invalidate();
mMapController.setCenter(gPt);
修改
如果您对更新osmdroid感到懒惰,只需添加下一个语句:
ViewTreeObserver vto = v.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mapView.getController().setCenter(gPt);
}
});
答案 0 :(得分:2)
答案 1 :(得分:0)
我知道这个问题已经相对陈旧且已经得到解答,但是对于那些在Xamarin工作并因Xamarin组件而受限制的人来说,由于过时使用4.2版本,请使用下面的解决方案,感谢Tony当然。 。
GeoPoint gp = new GeoPoint(lat, lng);
ViewTreeObserver vto = _mapView.ViewTreeObserver;
vto.GlobalLayout += (sender, args) =>
{
_mapView.Controller.SetCenter(gp);
};
答案 2 :(得分:0)
可能是因为您在布局地图之前调用了setCenter()。
尝试以下选项之一:
触发异步任务
@SuppressLint("StaticFieldLeak") AsyncTask<Void,Void,Void> waitForSize = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
while(mapView.getWidth() == 0){
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
mapView.getController().setCenter(myLocation);
}
};
waitForSize.execute();