Google 地图和 MapFragment 以及 getMapAsync

Google Maps and MapFragment and getMapAsync

最近怎么样?

我正在开发一个基于 Google 地图和位置服务的 android 应用程序。我对 Google Maps 略知一二,这是我在这个项目上学到的,但是关于 GoogleMaps 有几件事我不知道...

在我的主要 activity 中,我使用了一个 mapFragment。我有我的 onMapReady 方法....

@Override
public void onMapReady(GoogleMap map) {

    double myCurrentLatitude = getGPS()[0];
    double myCurrentLongitude = getGPS()[1];

    CameraPosition myCurrentLocation = CameraPosition.builder()
            .target(new LatLng(myCurrentLatitude, myCurrentLongitude))
            .zoom(12)
            .bearing(0)
            .tilt(2)
            .build();

   map.moveCamera(CameraUpdateFactory.newCameraPosition(myCurrentLocation));
    map.getUiSettings().setScrollGesturesEnabled(true);         

}

这只是 activity 中的一种方法,它工作正常,当 activity 启动时,它会放大用户所在的位置。

现在,我希望能够将地图缩放到特定位置。假设用户想去某个地方,我可以得到他们想去的地方的经纬度(双倍)....我一直没能得到这个activity来改变地图的焦点并缩放到这个新位置。

我已经尝试了几种方法,但我就是不知道如何操作 mapFragment。

我的小小研究向我展示了 getMapAsync,但这些方法似乎是 activity 刚刚启动时调用的方法。我想写一个方法(我称之为 placeLocation(lat, long)... 可以调用 3 分钟 later/whenever 我想要它会接受我给它的 lat/long,然后缩放我在该位置的 mapFragment。

我在我的 placeLocation 方法中尝试了这一行

map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

但是 android studio 对这个 getMap() 方法非常不满 - 基本上甚至不认识它。基本上我不知道如何在 getMap、getMapAsync 之间操作我的地图...你能帮忙吗?

请指点一下好吗?

感谢您的阅读,感谢您的宝贵时间。

代码小弟

首先您需要创建一个 class 变量,例如:

private GoogleMap mMap;

现在,当您的 onMapReady() 方法触发时,您可以获取 GoogleMap 对象并将其设置为 class 变量。

@Override
public void onMapReady(GoogleMap map) {
    mMap = map;

    double myCurrentLatitude = getGPS()[0];
    double myCurrentLongitude = getGPS()[1];

    CameraPosition myCurrentLocation = CameraPosition.builder()
            .target(new LatLng(myCurrentLatitude, myCurrentLongitude))
            .zoom(12)
            .bearing(0)
            .tilt(2)
            .build();

   mMap.moveCamera(CameraUpdateFactory.newCameraPosition(myCurrentLocation));
   mMap.getUiSettings().setScrollGesturesEnabled(true);  
}

现在,当您需要更改地图时,只需使用 class 变量 "mMap",如下所示:

private void mapMoveTo(double lat, double lng){
    LatLng latLng = new LatLng(lat, lng);
    if(mMap != null){
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoomFactor));
    }
}