将 getMap 替换为 getMapAsync
Replace getMap with getMapAsync
我想用 getMapAsync
替换已弃用的 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);
如果我像这样用 MapFragment
替换 googleMap
,我就不能再用 setMapType
等等。那么在我的情况下如何更改为 getMapAsync
?
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
和官方文档一样,get map async 需要回调;
你的 "main entry point" google 地图东西就在那里!
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()
回调中分配您的 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 方法。在您的 activity 上实施 OnMapReadyCallback。
创建 MapFragment 并对该对象调用 getAsyncMap 方法。
它会要求您执行 onMapReady(GoogleMap map) 方法,您可以在那里设置地图类型等。
希望对你有帮助。
我发现理解 getMapAsync 使用的更好方法是在 Android Studio 中创建一个新项目并使用 google 地图模板 activity 而不是空 activity.
您将有一个项目可以用来研究和调整您自己的项目。
我想用 getMapAsync
替换已弃用的 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);
如果我像这样用 MapFragment
替换 googleMap
,我就不能再用 setMapType
等等。那么在我的情况下如何更改为 getMapAsync
?
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
和官方文档一样,get map async 需要回调; 你的 "main entry point" google 地图东西就在那里!
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()
回调中分配您的 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 方法。在您的 activity 上实施 OnMapReadyCallback。 创建 MapFragment 并对该对象调用 getAsyncMap 方法。 它会要求您执行 onMapReady(GoogleMap map) 方法,您可以在那里设置地图类型等。 希望对你有帮助。
我发现理解 getMapAsync 使用的更好方法是在 Android Studio 中创建一个新项目并使用 google 地图模板 activity 而不是空 activity.
您将有一个项目可以用来研究和调整您自己的项目。