MapController setCenter不起作用

时间:2015-02-25 12:37:08

标签: java android openstreetmap osmdroid

我有一个GeoPoint gPt,坐标为55.790833,坐标为49.114444。我将这个东西添加到地图并尝试居中。但我的标记不在地图的中心(它有点高)。 enter image description here enter image description here

有什么问题?

这是我的代码:

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);
            }
        });

3 个答案:

答案 0 :(得分:2)

&#34;出了什么问题?&#34;

=&GT;当然是你的osmdroid版本,issue #22

升级到v4.3。

答案 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()。

尝试以下选项之一:

  1. 在代码中可以确定地图布局的位置调用setCenter()
  2. 覆盖地图的onLayout
  3. 触发异步任务

    @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();