Google Maps和MapFragment以及getMapAsync

时间:2018-05-16 16:56:00

标签: java android google-maps mapfragment

它怎么样?

我正在使用基于Google地图和位置服务的Android应用。我对谷歌地图有一点了解,我在这个项目上学到了很多东西,但有几件关于GoogleMaps的事我不知道......

在我的主要活动中,我使用了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);         

}

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

现在,我希望能够将地图缩放到特定位置。让我们说用户想去某个地方,我可以得到他们想去的地方的经度和纬度(双打)....我无法通过此活动来改变地图的焦点并放大到这个新位置。

我尝试了几件事,但我不知道如何操纵mapFragment。

我的小小研究向我展示了getMapAsync,但似乎这些是在刚刚启动活动时调用的方法。我正在寻找一个方法(我称之为placeLocation(lat,long)...可以在3分钟后调用/每当我需要时调用它将接受lat / long我给它,并缩放我的mapFragment位置。

我在我的placeLocation方法

中尝试了这一行
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

但是android studio对这个getMap()方法真的很痛苦 - 基本上甚至都没有识别它。基本上我不知道在getMap,getMapAsync之间操纵我的地图有什么方法......你能帮忙吗?

请给我一些指示?

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

你谦虚的兄弟代码。

1 个答案:

答案 0 :(得分:2)

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

private GoogleMap mMap;

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

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

现在,当您需要对地图进行更改时,只需使用类变量“mMap”,如下所示:

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