Google Maps Android API v2 getVisibleRegion() retu

2019-02-15 11:03发布

问题:

I am using the new Google Maps Android API v2 and need to detect latlng coordinates for the corners of my screen view. I use mMap.getProjection().getVisibleRegion() to do this, which works fine the first time I load the program, but if I leave the program and then re-open it (either via the back button or the home button) getVisibleRegion() returns latlng coordinates that are all (0.0, 0.0). I have a workaround where I save the VisibleRegion object as a global in the application class when I first open the program, but this seems like a bad idea. Anyone understand why the latlng coordinates go to zero (but not null) when re-opening? Thanks!

Edit: sometimes initial load gives a (0.0, 0.0) Visible Region so my workaround is not viable. Using getProjection().fromScreenLocation(point) also returns 0.

回答1:

Okay, I think I solved it: I was guessing right: The map was not visible and therefore there is also no visibleRegion (in other words a region from 0,0,0,0 to 0,0,0,0). Similar to this question

Android Google Maps API v2 calling getProjection from onResume

I attached an onCameraChanged-Listener to my map. Everytime the map is moved (or the camera is available => There is a visibleRegion) this method is called.

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());

            ...
        }
    }
}

This listener makes sure that you have a visibleRegion.

UPDATE: Since the new update of the Google Maps API v2, there is a callback onMapReady(). I did not use it yet, but it seems to serve exactly the purpose of this question: https://developer.android.com/reference/com/google/android/gms/maps/OnMapReadyCallback.html