我正在使用新的Android Google Maps API。moveCamera with CameraUpdateFactory.newLatLngBounds崩潰
我創建了一個包含MapFragment的活動。在活動onResume
中,我將標記設置爲GoogleMap對象,然後爲包含所有標記的地圖定義邊界框。
這是使用下面的僞代碼:
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)
如果 - 而不是我用的是newLatLngBounds()
工廠方法newLatLngZoom()
方法然後相同的陷阱不會發生。
onResume
是將標記繪製到GoogleMap對象上的最佳位置,還是應該繪製標記並在其他位置設置相機位置?
但是如果地圖不佔用整個屏幕呢? – theblang
在我的情況下,我只是假設了一個比實際效果更大的屏幕,並且需要更仔細地計算填充,所以它實際上不是*太大。一個更簡單的原因。 – rfay
你能展示如何根據屏幕尺寸來計算它嗎? – Caipivara