用getMapAsyncreplacegetMap
我想用getMapAsync
replace不赞成使用的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);
如果我用这样的googleMap
replacegoogleMap
,我不能再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等等。 希望它有帮助。