用getMapAsyncreplacegetMap

我想用getMapAsyncreplace不赞成使用的getMap方法,但是我没有使用MapFragment ,而是使用GoogleMap

 private GoogleMap googleMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map); try { if(googleMap == null) { googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); } googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); googleMap.setMyLocationEnabled(true); googleMap.setTrafficEnabled(true); googleMap.setIndoorEnabled(true); googleMap.setBuildingsEnabled(true); googleMap.getUiSettings().setZoomControlsEnabled(true); 

如果我用这样的googleMapreplacegoogleMap ,我不能再setMapType等等。 那么在我的情况下,如何更改为getMapAsync呢?

 MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); 

正如在官方文档中,获取地图asynchronous需要callback; 它在那里你的谷歌地图的东西的“主要切入点”!

 public class MapPane extends Activity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_activity); MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap map) { // DO WHATEVER YOU WANT WITH GOOGLEMAP map.setMapType(GoogleMap.MAP_TYPE_HYBRID); map.setMyLocationEnabled(true); map.setTrafficEnabled(true); map.setIndoorEnabled(true); map.setBuildingsEnabled(true); map.getUiSettings().setZoomControlsEnabled(true); } } 

非常简单,只需让您的Activity实现OnMapReadyCallback接口,然后在onMapReady()callback中分配您的googleMap参考。

然后,在googleMap上执行所需的任何操作。

这是一个简单的例子:

 public class MainActivity extends Activity implements OnMapReadyCallback { private GoogleMap googleMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap map) { googleMap = map; setUpMap(); } public void setUpMap(){ googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); googleMap.setMyLocationEnabled(true); googleMap.setTrafficEnabled(true); googleMap.setIndoorEnabled(true); googleMap.setBuildingsEnabled(true); googleMap.getUiSettings().setZoomControlsEnabled(true); } } 

如果你使用MapFragment,你仍然可以使用stMapType方法。 在您的活动上实现OnMapReadyCallback。 创buildMapFragment并在该对象上调用getAsyncMap方法。 它会要求你在MapReady(GoogleMap地图)方法上执行,你可以设置地图types等等。 希望它有帮助。