我的活动在LinearLayout中包含MapFragment。我做了以下
在onCreate中:
GoogleMap
。getMap()
的句柄
:
LatLngBounds.Builder
newLatLngBounds(Builder.build(), 10)
根据maps api参考,我不应该在确保地图有大小之前调用newLatLngBounds(LatLngBounds bounds, int padding)
。我确实在这一点上得到了IllegalStateException。但等到地图有大小的正确方法是什么?
答案 0 :(得分:11)
solution by rusmus对我不起作用。我改用了这个:
map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
map.animateCamera(cameraUpdate);
}
});
如果您知道地图大小,则可以避免在显示地图之前等待并移动相机。我们最终使用显示尺寸作为地图尺寸的近似值(但如果您想要更精确,可以找出确切的尺寸):
final DisplayMetrics display = getResources().getDisplayMetrics();
final int padding = display.widthPixels / 20;
final CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(
boundsBuilder.build(), display.widthPixels, display.heightPixels, padding);
map.moveCamera(cameraUpdate);
答案 1 :(得分:8)
我过去成功使用过以下代码:
final LatLngBounds.Builder builder = new LatLngBounds.Builder();
final View mapView = fragment.getView();
final GoogleMap map = fragment.getMap():
//Add points to builder. And get bounds...
final LatLngBounds bounds = builder.build();
// Pan to see all markers in view.
// Cannot zoom to bounds until the map has a size.
if (mapView.getViewTreeObserver().isAlive()) {
mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50), 1500, null);
}
});
}
答案 2 :(得分:1)
使用最新的Google服务,您可以使用MapFragment.getMapAsync。 直接来自文档
设置一个回调对象,该对象将在准备好使用GoogleMap实例时触发。