繁体   English   中英

Mapbox,MapSnapshotter.callback并非总是被调用

[英]Mapbox, MapSnapshotter.callback is not always invoked

我主要在我的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);
                }
            });
        }
    });

因此,经过一些曲折,我终于弄清楚了。
问题在于,MapSnapshotter.start是一个异步任务,由于手机在首次启动时会在回收器视图中加载3个项目,因此,每个项目都在上一个项目之前的同一线程中调用MapSnapshotter.start。完成,因此取消它。 这就解释了为什么只有最后一项具有图像加载。

解决此问题的一种方法是使Async任务变为Sync,但我不建议使用此解决方案。

另一种方法是在适配器中添加属性MapSnapshotter。 这样做,您的每个项目都将拥有自己的MapSnapshotter。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM