我需要移动摄像机来覆盖上面的所有标记。所以,我构建LatLngBounds,然后尝试调用mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(latLngBounds, 15))。问题是当我使用moveCamera()方法时,我得到了IllegalStateException,但当我使用animateCamera()方法时,一切都很好。我在onMapReady回调中调用这两个方法。怎么回事?
我的stacktrace(主要部分):

java.lang.IllegalStateException: Error using newLatLngBounds(LatLngBounds, int): Map size can't be 0. Most likely, layout has not yet occured for the map view.  Either wait until layout has occurred or use newLatLngBounds(LatLngBounds, int, int, int) which allows you to specify the map's dimensions.

为什么一种方法知道地图大小而另一种方法不知道呢?

最佳答案

根据documentation,此api在地图布局之前不能使用。它说
注意:只使用更简单的方法newlatlngbounds(boundary,padding)
如果要使用cameraupdate来移动
在地图完成布局后拍摄。在布局期间,api
计算所需的地图显示边界
正确投影边界框。相比之下,您可以使用
更复杂的方法返回的cameraupdate
任何时候,甚至
在地图完成布局之前,因为api计算
显示传递的参数的边界。
但您可以使用newLatLngBounds()中的OnCameraChangeListener方法。一切都会完美工作,你不需要计算屏幕大小。据我所知,此事件发生在地图大小计算之后。

    mMap.setOnCameraChangeListener(new OnCameraChangeListener() {

    @Override
    public void onCameraChange(CameraPosition arg0) {
        // Move camera.
        mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 15));
        // Remove listener to prevent position reset on camera move.
        mMap.setOnCameraChangeListener(null);
    }
});

09-19 10:57