【问题标题】:Detect when Android v2 maps has loaded检测 Android v2 地图何时加载
【发布时间】:2013-08-22 10:09:05
【问题描述】:

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

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

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

【问题讨论】:

标签: android maps


【解决方案1】:

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

祝你好运

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

更新: 状态:已修复 标签:Fixed-Oct2013

schr 对问题 5779 的评论 #3...@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 的主演 丹尼117

****编辑****

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

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

* 编辑 * 全新的 OnMapLoadedCallback

更新: 状态:已修复 标签:Fixed-Oct2013

schr 对问题 5779 的评论 #3...@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 期主演。 丹尼117

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

看起来它是一个等待更新的解决方案。我为您点击了星号,因为我将在我自己的 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

【讨论】:

    【解决方案2】:

    我看到这个问题还没有解决。 不知道为什么,但对我来说,当地图完成加载时,会调用 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);
            }
        });
    

    【讨论】:

    • 这个方法在你移动相机时调用,而不是在地图完全渲染时调用。
    • 不推荐使用的方法:@Deprecated public final void setOnCameraChangeListener(final GoogleMap.OnCameraChangeListener var1)
    【解决方案3】:

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

    public void onShowMap(View v) {
        // where you put the MapView layout in ViewStub view
        ViewStub.setVisibility(View.VISIBLE);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多