检测Android v2地图何时加载

时间:2013-08-22 10:09:05

标签: android maps

我正在编写一个应用程序,当用户按下按钮时,该应用程序将在地区周围拍摄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);

不幸的是,在拍摄快照时,地图偶尔会完成加载,因此您最终得到: Partially blurred map snapshot

那么,有没有办法在地图视图加载完成后检测或设置监听器?

3 个答案:

答案 0 :(得分:46)

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

祝你好运

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

更新:         状态:已修复         标签:固定 - 2013年10月

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

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

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

感谢大家主演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的最新版本中添加了地图加载的回调界面。

有关详细信息,请参阅文档: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

答案 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);
}