OSMdroid继续导航回setcenter位置,为什么?

时间:2015-09-06 23:07:51

标签: android android-mapview openstreetmap osmdroid

亲爱的朋友们,我有一个osmdroid地图版本4.2和slf版本1.5.8

我也有这个java代码(在那里)。 我的问题是,无论我在哪里设置“setCenter”方法,然后启动地图,然后我尝试导航,系统立即将我转移回我之前设置的defualt坐标。

任何想法如何让我自由地使用预定义的中心导航?

 package com.example.com.example;

import org.osmdroid.api.IMapController;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;

import android.app.Activity;
import android.os.Bundle;
import android.view.ViewTreeObserver;

public class OSM_Map extends Activity {

    private MapView mapView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_osm__map);

        mapView = (MapView) this.findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapView.setMultiTouchControls(true);


        //IMapController mapController  = mapView.getController();
        mapView.getController().setZoom(11);



        ViewTreeObserver vto = mapView.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {      //VERY IMPORTANT, DRAWS LAYOUT FIRST, then positions
                mapView.getController().setCenter(new GeoPoint(40.712784,-74.005941));
            }
        });

    }


}

谢谢

1 个答案:

答案 0 :(得分:0)

正在重复调用onGlobalLayout侦听器,然后将中心重置为预定义的点。

您需要在最初设置中心后添加以下内容来删除侦听器:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) 
            mapView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        else
            mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);