15

我正在编写一个应用程序,当用户按下按钮时,它将在一个区域周围拍摄 9 张地图快照。

在循环中,使用它来移动和保存:

map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mStartLat + (mMultiOffsetX + mWidth), mStartLng + (mMultiOffsetY + mHeight)), mZoom)); 
map.snapshot(this);

在 onSnapshotReady 中:

final String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + String.format("/test_maps/map_%f_%f.png", Double.valueOf(mStartLat + (mMultiOffsetX * mWidth)), Double.valueOf(mStartLng + (mMultiOffsetY * mHeight)));
FileOutputStream fos = new FileOutputStream(new File(fileName));
bmp.compress(CompressFormat.PNG, 0, fos);

不幸的是,在拍摄快照时地图偶尔会完成加载,因此您最终会得到: 部分模糊的地图快照

那么,有什么方法可以检测或设置地图视图何时完成加载的侦听器?

4

3 回答 3

50

OnMapLoadedCallback 直到地图上的瓦片被加载后才会触发。只触发一次,因此您必须调用九次才能拍摄九张快照。

当您有对地图的引用时,请设置回调。

mMap.setOnMapLoadedCallback(this);

当 onMapLoaded 事件触发时拍摄快照。

@Override
public void onMapLoaded() {
if (mMap != null) {
    mMap.snapshot(this);
}
}

有关更多信息,请参阅文档:https ://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback

祝你好运

****等待此功能实施的历史。

更新:状态:固定标签:Fix-Oct2013

schr 对问题 5779 的评论 #3...@google.com:能够在地图完全加载/渲染时收到通知 http://code.google.com/p/gmaps-api-issues/issues/detail?编号=5779

最新版本的 Google Maps Android API v2 中添加了地图加载回调接口。

有关更多信息,请参阅文档:https ://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback

感谢大家主演 issue 5779 和 61675 Danny117

**** 编辑 ****

如果你来这里,请给这个问题加注星标。 http://code.google.com/p/android/issues/detail?id=61675 您的星号点击会促使谷歌继续解决这个问题。

地图更新 13 导致 google play 服务出现问题,因此您还不能使用新的 OnMapLoadedCallback。您可以针对它进行编译,但 map api 会在 logcat Google Play 服务中生成错误消息。需要 4030500 但找到 3266130

* 编辑 * 全新的 OnMapLoadedCallback

更新:状态:固定标签:Fix-Oct2013

schr 对问题 5779 的评论 #3...@google.com:能够在地图完全加载/渲染时收到通知 http://code.google.com/p/gmaps-api-issues/issues/detail?编号=5779

最新版本的 Google Maps Android API v2 中添加了地图加载回调接口。

有关更多信息,请参阅文档:https ://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.OnMapLoadedCallback

感谢大家主演第5779期。Danny117

**** 以下内容已弃用 *****

看起来它正在等待更新解决方案。我为您点击了星号,因为我将在我自己的 api v2 地图中处理此功能。

编辑*** 这是地图渲染时提议的新回调。访问的每个人都请点击链接并为这个问题加注星标。 http://code.google.com/p/gmaps-api-issues/issues/detail?id=5779

*** 以前的 snapshop 回调不会改变。访问的每个人都请点击链接并为这个问题加注星标。 http://code.google.com/p/gmaps-api-issues/issues/detail?id=5712

https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/GoogleMap.SnapshotReadyCallback

于 2013-08-25T19:30:33.977 回答
4

正如我所看到的,这个问题还没有解决。不知道为什么,但对我来说,当地图完成加载时,会调用 OnCameraChangeListener。所以我只是用这样的方式来检测地图何时完成加载。

googleMap.setOnCameraChangeListener(new OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition arg0) {
            map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(
                    mStartLat + (mMultiOffsetX + mWidth), mStartLng
                            + (mMultiOffsetY + mHeight)), mZoom));
            map.snapshot(this);
        }
    });
于 2014-03-20T16:38:16.080 回答
1

尝试使用ViewStub该类来帮助您延迟加载地图。您可以使用以下代码检测地图何时加载:

public void onShowMap(View v) {
    // where you put the MapView layout in ViewStub view
    ViewStub.setVisibility(View.VISIBLE);
}
于 2013-08-24T20:54:53.770 回答