Java 地图控制器设置中心不';行不通
我得到了一个地质点gPt,坐标为55.790833,49.114444。我将那个东西添加到地图上,并尝试居中。但我的标记不在地图的中心(它稍微高一点)。 怎么了 这是我的代码:Java 地图控制器设置中心不';行不通,java,android,openstreetmap,osmdroid,Java,Android,Openstreetmap,Osmdroid,我得到了一个地质点gPt,坐标为55.790833,49.114444。我将那个东西添加到地图上,并尝试居中。但我的标记不在地图的中心(它稍微高一点)。 怎么了 这是我的代码: mResourceProxy = new ResourceProxyImpl(this.getActivity().getApplicationContext()); mapView = (MapView) v.findViewById(R.id.mapview); mapView.se
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版本,带有
升级到v4.3 我知道这个问题相对来说比较老,而且已经得到了回答,但是对于那些在Xamarin工作的人来说,由于Xamarin组件已经过时,无法使用4.2版本,因此受到限制,请使用下面的解决方案,当然要感谢Tony
GeoPoint gp = new GeoPoint(lat, lng);
ViewTreeObserver vto = _mapView.ViewTreeObserver;
vto.GlobalLayout += (sender, args) =>
{
_mapView.Controller.SetCenter(gp);
};
这可能是因为在绘制地图之前调用了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);
}
@suppressint(“StaticFieldLeak”)AsyncTask waitForSize=new AsyncTask(){
@凌驾
受保护的空位背景(空位…空位){
而(mapView.getWidth()==0){
试一试{
睡眠(1500);
}捕捉(中断异常e){
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
mapView.getController().setCenter(myLocation);
}
})@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);
}