我主要在我的项目中使用 mapbox,但在一个实例中,我需要在 recyclerView 中显示 map 。为此,我考虑使用 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);
}
});
}
});
最佳答案
所以经过一番折腾,我终于弄明白了。
问题是 MapSnapshotter.start 是一个异步任务,因为手机在第一次启动时在回收站 View 中加载了 3 个项目,而每个项目都在同一个线程中调用 MapSnapshotter.start在上一个完成之前,所以取消它。这解释了为什么只有最后一个项目加载了图像。
解决这个问题的方法是让Async任务变成Sync,但我不推荐这个方案。
另一种方法是在您的适配器中添加一个属性 MapSnapshotter。这样做,您的每个项目都将拥有自己的 MapSnapshotter。
关于java - Mapbox,MapSnapshotter.callback 并不总是被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51067731/