我面临的问题是我需要在屏幕上更新地图,以便可以看到用户所采用路线的所有点。
在下面的代码中,我计算了我请求地图更新的次数,但我注意到有时请求的数量与回调的数量不匹配。所以等待'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) {}
}
}
答案 0 :(得分:1)
在地图上显示所有折线。
创建构建器
LatLngBounds.Builder builder = new LatLngBounds.Builder();
迭代折线中的所有点,将它们发送到lat long bounds 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);
IDK你在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);
注意:沿着路线移动相机将类似于您的代码,但通常只有在相机完成每个点时才更新相机。