我主要在projet中使用mapbox,但是在一个实例中,我需要在recyclerView中显示地图。为此,我考虑使用MapSnapshotter而不是静态Map Api,因为用户可能没有连接。
不幸的是,在进行测试时,我无法正常运行MapSnapshotter.callback。有时加载/创建图像,有时则不加载,并且确实感觉是随机的。
Mapbox.getInstance(this, MyMapbox.getToken());
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(MapboxMap mapboxMap) {
map = mapboxMap;
MapSnapshotter.Options options = new MapSnapshotter.Options(mapView.getMeasuredWidth(),mapView.getMeasuredHeight());
options.withRegion(mapboxMap.getProjection().getVisibleRegion().latLngBounds);
options.withStyle(mapboxMap.getStyleUrl());
MapSnapshotter mapSnapshotter = new MapSnapshotter(getContext(), options);
mapSnapshotter.start(new MapSnapshotter.SnapshotReadyCallback() {
@Override
public void onSnapshotReady(MapSnapshot snapshot) {
Log.i(LOG_TAG, "onSnapshotReady");
Bitmap bitmap = snapshot.getBitmap();
imageview.setImageBitmap(bitmap);
}
}, new MapSnapshotter.ErrorHandler() {
@Override
public void onError(String error) {
Log.i(LOG_TAG, error);
}
});
}
});
答案 0 :(得分:0)
因此,经过一些扭曲,我终于弄清楚了。
问题是MapSnapshotter.start是一个异步任务,由于手机在首次启动时正在回收器视图中加载3个项目,因此每个项目都在同一线程中调用MapSnapshotter.start。在上一个操作完成之前,请取消它。这就解释了为什么只有最后一项具有图像加载。
解决此问题的一种方法是使Async任务变为Sync,但我不建议这样做。
另一种方法是在Adapter中添加属性MapSnapshotter。这样做,您的每个项目都将拥有自己的MapSnapshotter。