当前的android google maps api要求在访问mapFragment.getMapAsync
之前用OnMapReadyCallback
调用GoogleMap
。我以为一旦你有了GoogleMap
就可以安全地打电话给moveCamera()
,但我看到了一个IllegalStateException
的车祸报告,上面写着Map size can't be 0. Most likely, layout has not yet occured for the map view
。
因此,我尝试添加一个ViewTreeObserver.OnPreDrawListener
,并将moveCamera()
调用移动到onPreDraw
方法,因为文档中说“此时,树中的所有视图都已测量并给定了一个框架”。但我仍然看到一些有同样问题的坠机报告。我找不到这方面的任何文档-有一些问题,比如moveCamera with CameraUpdateFactory.newLatLngBounds crashes但是它们提前了getMapAsync
api的日期,所以它们没有多大帮助。
最佳答案
我也有同样的问题。当应用程序尝试使用此相机更新更改相机时,此google地图库抛出异常,直到地图完成布局(为了使此方法正确确定适当的边界框和缩放级别,地图必须具有大小)。它描述了here。
这是我的解决方案:
@Override
public void onMapReady(GoogleMap googleMap) {
googleMap.setOnMapLoadedCallback(this);
}
@Override
public void onMapLoaded() {
googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(…));
}