我正在编写一个应用程序,当用户按下按钮时,该应用程序将在地区周围拍摄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);
不幸的是,在拍摄快照时,地图偶尔会完成加载,因此您最终得到:
那么,有没有办法在地图视图加载完成后检测或设置监听器?
答案 0 :(得分:46)
OnMapLoadedCallback直到加载地图上的切片后才会触发。只触发一次,所以你必须打电话九次拍九张快照。
如果您有对地图的引用,请设置回叫。
mMap.setOnMapLoadedCallback(this);
当onMapLoaded事件触发时拍摄快照。
@Override
public void onMapLoaded() {
if (mMap != null) {
mMap.snapshot(this);
}
}
祝你好运
**** 等待实施此功能的历史记录。
更新: 状态:已修复 标签:固定 - 2013年10月
关于问题5779的评论#3由schr ... @ google.com:能够在地图完全加载/渲染时得到通知 http://code.google.com/p/gmaps-api-issues/issues/detail?id=5779
Google Maps Android API v2的最新版本中添加了地图加载的回调界面。
感谢大家主演5779号和61675号 Danny117
****编辑****
如果你来这里,请为这个问题加注星标。 http://code.google.com/p/android/issues/detail?id=61675 您的星级点击次数将激励Google继续解决此问题。
地图更新13导致Google Play服务出现问题,因此您无法使用新的OnMapLoadedCallback。您可以针对它进行编译,但地图api会在logcat Google Play服务中生成过时的错误消息。需要4030500但找到3266130
*编辑* 全新的OnMapLoadedCallback
更新: 状态:已修复 标签:固定 - 2013年10月
关于问题5779的评论#3由schr ... @ google.com:能够在地图完全加载/渲染时得到通知 http://code.google.com/p/gmaps-api-issues/issues/detail?id=5779
Google Maps Android API v2的最新版本中添加了地图加载的回调界面。
感谢所有人主演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
答案 1 :(得分: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);
}
});
答案 2 :(得分:1)
尝试使用ViewStub
类来帮助您延迟加载地图。
您可以使用以下代码检测加载地图的时间:
public void onShowMap(View v) {
// where you put the MapView layout in ViewStub view
ViewStub.setVisibility(View.VISIBLE);
}