如何确定未知数量的地图更新已经完成?

How to be sure that an unknown number of map updates have been completed?

我面临的问题是我需要更新屏幕上的地图,以便用户所走路线的所有点都可见。

在下面的代码中,我计算了我请求地图更新的次数,但我注意到有时请求的次数与回调的次数不匹配。所以等待 'mapLoaded' 变成 0 不是一个好主意。

因此我添加了 10 秒的时间限制,但这是任意的,有时还不够。 那么,我怎么才能确定所有的地图更新已经完成呢?

private void adjustMapCompleteSO(LatLng from, LatLng to){//3.3.17 show all points for screenshot
    double x1=(from.latitude+to.latitude)/2;
    double x2=(from.longitude+to.longitude)/2;
    LatLng del=new LatLng(x1,x2);
    map.moveCamera(CameraUpdateFactory.newLatLng(del));

    mapLoaded=0;

    for(Polyline pol : allcrumbs){
        List<LatLng> points = pol.getPoints();
        for (LatLng point : points){

            LatLngBounds.Builder builder = new LatLngBounds.Builder();
            builder.include(point);

            LatLngBounds bounds = builder.build();
            int padding = 40; // offset from edges of the map in pixels

            CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);

            mapLoaded++;
            map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                public void onMapLoaded() {
                    mapLoaded--;
                }
            });

            map.moveCamera(cu);
        }
    }
    Date started = new Date();
    while (mapLoaded !=0 && new Date().getTime() - started.getTime() < 10000){
        try {//wait until map has loaded, but max 10 seconds
            Thread.sleep(500);//wait half a second before tyring again
        } catch (InterruptedException e) {}
    }
}

在地图上显示所有折线。

创建构建器

        LatLngBounds.Builder builder = new LatLngBounds.Builder();

迭代折线中的所有点,将它们发送到经纬度边界生成器。

for(Polyline pol : allcrumbs){
    List<LatLng> points = pol.getPoints();
    for (LatLng point : points){
        //   dude never initialize variables in a loop again
        //   its automatic fail for speed of execution.
        // String never = "Do this in a loop";
        // int padding = 40; // offset from edges of the map in pixels
        builder.include(point);
    }
 }

现在移动相机

LatLngBounds bounds = builder.build();
int padding = 40; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
map.moveCamera(cu);

我知道你在 maploaded 回调中做了什么,所以它不在上面的代码中。

提示:在创建折线时填充 latlngbounds.builder,只需在完成加载折线后移动相机即可。

LatLngBounds bounds = builder.build();
int padding = 40; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
map.moveCamera(cu);

注意:沿路线移动相机与您的代码类似,但您通常只会在每个点的相机完成后更新相机。