我正在使用新的Google Maps Android API v2,需要检测屏幕视图角落的latlng坐标。我使用 mMap.getProjection().getVisibleRegion() 来执行此操作,这在我第一次加载程序时工作正常,但是如果我离开程序然后重新打开它(通过后退按钮或主页按钮),getVisibleRegion() 返回所有 (0.0, 0.0) 的 latlng 坐标。我有一个解决方法,当我第一次打开程序时,我将 VisibleRegion 对象保存为应用程序类中的全局对象,但这似乎是一个坏主意。有人明白为什么 latlng 坐标在重新打开时变为零(但不为零)?谢谢!
编辑:有时初始加载会给出(0.0,0.0)可见区域,因此我的解决方法不可行。使用 getProjection().fromScreenLocation(point) 也返回 0。
好的,我想我解决了它:我猜对了:地图不可见,因此也没有可见区域(换句话说,从 0,0,0,0 到 0,0,0,0 的区域)。与这个问题类似
Android Google Maps API v2 调用 getProjection from onResume
我在我的地图上附加了一个 onCameraChanged-Listener。每次移动地图(或相机可用=>有一个可见区域)时,都会调用此方法。
private void initMap() {
mMap = getMap();
if (mMap != null) {
try {
mMap.setLocationSource(this);
mMap.setOnMarkerClickListener(this);
mMap.setOnCameraChangeListener(new OnCameraChangedListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Log.d(TAG, "onCameraChange");
updateMapItems();
}
}
MapsInitializer.initialize(getActivity());
...
}
}
}
此侦听器确保您有一个可见的区域。
更新:自从谷歌地图API v2的新更新以来,有一个回调onMapReady()
。我还没有使用它,但它似乎正是这个问题的目的:https://developer.android.com/reference/com/google/android/gms/maps/OnMapReadyCallback.html