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));
}
}
最近怎么样?
我正在开发一个基于 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));
}
}