Android com.google.android.gms.maps.MapView animateCamera第一次无效

时间:2014-10-26 07:27:13

标签: android google-maps android-mapview

我有一个带有mapview的活动。 我有一些代码可以动画相机以包含mapview中的所有标记。 前两次我在启动它的活动后调用我的动画相机代码,它不起作用。 从第三次开始,它正常工作。 对此有何解释?

以下是我的相关代码:

            if (filteredList.size() > 0)
            {
                LatLngBounds.Builder builder = new LatLngBounds.Builder();
                for (Marker marker : markers)
                {
                    builder.include(marker.getPosition());
                }
                LatLngBounds bounds = builder.build();
                int padding = 50; // offset from edges of the
                                    // map in pixels
                CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
                map.animateCamera(cu);
            }

在加载活动并从Web服务获取数据后,此代码将被调用一次(并且不起作用)。 当用户按下按钮时它会被第二次调用(但仍然不起作用)。 它会再次响应来自用户的按钮按下,并从此开始正常工作。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

按下第一个按钮,将地图的可见性设置为“可见”,因此事实证明它实际上尚未初始化。 感谢Marcin Orlowski。 我通过添加以下内容修复了它: mapView.addOnLayoutChangeListener(new OnLayoutChangeListener()         {

        @Override
        public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom)
        {
            if (firstMapLayout)
            {
                firstMapLayout = false;
                rebuildMap();
            }
        }
    });

其中“rebuildMap()”是包含相机动画代码的函数。

谢谢你们。

答案 1 :(得分:0)

我成功地使用onMapLoadedCallback这样:

        mapView.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
        @Override
        public void onMapLoaded() {
            mapLoaded = true;

            // show location on map or execute any code that you need 
            // after the map loading
        }
    });