android - 带有 CameraUpdateFactory.newLatLngBounds 的 moveCamera 崩溃

标签 android android-mapview google-maps-android-api-2

我正在使用新的 Android Google Maps API .

我创建了一个包含 MapFragment 的 Activity 。在 Activity onResume 中,我将标记设置到 GoogleMap 对象中,然后为包含所有标记的 map 定义一个边界框。

这是使用下面的伪代码:

LatLngBounds.Builder builder = new LatLngBounds.Builder();
while(data) {
   LatLng latlng = getPosition();
   builder.include(latlng);
}
CameraUpdate cameraUpdate = CameraUpdateFactory
   .newLatLngBounds(builder.build(), 10);
map.moveCamera(cameraUpdate);

map.moveCamera() 的调用导致我的应用程序因以下堆栈而崩溃:

Caused by: java.lang.IllegalStateException: 
    Map size should not be 0. Most likely, layout has not yet 

    at maps.am.r.b(Unknown Source)
    at maps.y.q.a(Unknown Source)
    at maps.y.au.a(Unknown Source)
    at maps.y.ae.moveCamera(Unknown Source)
    at com.google.android.gms.maps.internal.IGoogleMapDelegate$Stub
        .onTransact(IGoogleMapDelegate.java:83)
    at android.os.Binder.transact(Binder.java:310)
    at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a
        .moveCamera(Unknown Source)
    at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source)
    at ShowMapActivity.drawMapMarkers(ShowMapActivity.java:91)
    at ShowMapActivity.onResume(ShowMapActivity.java:58)
    at android.app.Instrumentation
        .callActivityOnResume(Instrumentation.java:1185)
    at android.app.Activity.performResume(Activity.java:5182)
    at android.app.ActivityThread
        .performResumeActivity(ActivityThread.java:2732)

如果 - 我使用 newLatLngZoom() 方法而不是 newLatLngBounds() 工厂方法,则不会发生相同的陷阱。

onResume 是在 GoogleMap 对象上绘制标记的最佳位置,还是应该在其他地方绘制标记并设置相机位置?

最佳答案

您可以在 OnCameraChangeListener 中使用简单的 newLatLngBounds 方法。一切都将完美运行,您无需计算屏幕尺寸。此事件发生在 map 大小计算之后(据我了解)。

例子:

map.setOnCameraChangeListener(new OnCameraChangeListener() {

    @Override
    public void onCameraChange(CameraPosition arg0) {
        // Move camera.
        map.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 10));
        // Remove listener to prevent position reset on camera move.
        map.setOnCameraChangeListener(null);
    }
});

关于android - 带有 CameraUpdateFactory.newLatLngBounds 的 moveCamera 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692579/

相关文章:

android - 向标记添加自定义属性(Google Map Android API V2)

java - 如何在 android 谷歌地图版本 2 中的 2 个地理点之间画线?

android - Android 8以上版本Delphi无法启动Android Service

android - 如何根据标记位置设置 Google map 的缩放级别

android - 单击刷新按钮刷新 Activity 内容

android - 在 Android 上长按 GoogleMap 的 InfoWindow

Android 如何使用 'OR' 组合两个解析查询

android - 代号一号账号&推送通知支持

android - support-v4 中的 FragmentTransaction 没有 detach()?

android - MapView onCLick 事件监听器