我试图在我的android应用程序中使用mapbox在地图上显示一个自定义矢量层。使用最新的Mapbox版本。
当我按以下方式包含图层时:
//DOES NOT WORK
binding.mapView.getMapAsync(mapboxMap -> {
map = mapboxMap;
VectorSource source = new VectorSource("source-id", new TileSet("2.1.0", baseUrl + "/{z}/{x}/{y}.mvt"));
mapboxMap.addSource(source);
LineLayer layer = new LineLayer("zones-outline", "source-id");
layer.setSourceLayer("zones");
layer.setProperties(
PropertyFactory.lineWidth(2f),
PropertyFactory.lineColor(getResources().getColor(R.color.md_blue_500))
);
mapboxMap.addLayer(layer);
})
它什么也没显示(在android和我的服务器上都没有登录,就像mapbox甚至不知道这个层一样)。
但是,如果我将addsource和addlayer代码放在一个runnable中,比方说100毫秒的延迟,它确实正确地显示了我的层。显然,这看起来与某种并发性或“初始化顺序”有关,并且延迟有效,但这不是一个好的和正确的解决方案(我想在旧设备上,加载映射可能需要100毫秒以上,可能不起作用)。
//WORKS
binding.mapView.getMapAsync(mapboxMap -> {
final Handler handler = new Handler();
handler.postDelayed(() -> {
map = mapboxMap;
VectorSource source = new VectorSource("source-id", new TileSet("2.1.0", baseUrl + "/{z}/{x}/{y}.mvt"));
mapboxMap.addSource(source);
LineLayer layer = new LineLayer("zones-outline", "source-id");
layer.setSourceLayer("zones");
layer.setProperties(
PropertyFactory.lineWidth(2f),
PropertyFactory.lineColor(getResources().getColor(R.color.md_blue_500))
);
mapboxMap.addLayer(layer);
}, 100)
})
是否有其他方法/回调用于放置此初始化?如何确定我的图层将被绘制?