3

我正在使用新的 Google Maps Android API v2,需要检测屏幕视图角落的 latlng 坐标。我使用 mMap.getProjection().getVisibleRegion() 来执行此操作,这在我第一次加载程序时工作正常,但如果我离开程序然后重新打开它(通过后退按钮或主页按钮)getVisibleRegion () 返回全为 (0.0, 0.0) 的 latlng 坐标。我有一个解决方法,当我第一次打开程序时,我将 VisibleRegion 对象保存为应用程序类中的全局对象,但这似乎是个坏主意。任何人都明白为什么重新打开时纬度坐标变为零(但不是空)?谢谢!

编辑:有时初始加载会给出 (0.0, 0.0) 可见区域,所以我的解决方法不可行。使用 getProjection().fromScreenLocation(point) 也返回 0。

4

1 回答 1

9

好的,我想我解决了:我猜对了:地图不可见,因此也没有可见区域(换句话说,从 0,0,0,0 到 0,0,0,0 的区域)。类似于这个问题

Android Google Maps API v2 从 onResume 调用 getProjection

我在我的地图上附加了一个 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

于 2013-02-04T10:58:18.510 回答