何时可以在OnMapReadyCallback的onMapReady之后调用GoogleMap.moveCamera?

Jon*_*ryl 14 android google-maps

目前的Android Google Maps API要求您先mapFragment.getMapAsync使用a 调用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方法,因为该文档说"在这一点上,树中的所有视图都已经过测量并给出了一个框架".但我仍然看到一些同样问题的崩溃报告.我找不到任何相关的文档 - 像CameraUpdateFactory.newLatLngBounds崩溃的诸如moveCamera之类的问题但它们在getMapAsyncAPI 之前已经过时,所以它们没有多大帮助.

mbe*_*sky 11

我遇到过同样的问题.当应用尝试使用此相机更新更改相机时,此Google地图库会引发异常,直到地图经历了布局(为了使此方法正确确定合适的边界框和缩放级别,地图必须具有大小).它在这里描述.

这是我的解决方案:

@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.setOnMapLoadedCallback(this);
}

@Override
public void onMapLoaded() {
    googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(…));
}
Run Code Online (Sandbox Code Playgroud)


Nan*_*noc 0

在调用 onMapReady(GoogleMap googleMap) 后,您可以立即执行任何操作。

这现在在 mi 应用程序中运行:

mapFragment.getMapAsync(new OnMapReadyCallback() {

            @Override
            public void onMapReady(GoogleMap googleMap) {

                map = googleMap;
                map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(usr.getLatitud(), usr.getLongitud()), 14.6f));
            }
});
Run Code Online (Sandbox Code Playgroud)