Esperando hasta que el mapa google tenga tamaño en un MapFragment

Mi actividad contiene un MapFragment en un LinearLayout. Hago lo siguiente

En onCreate:

  • Inflar este diseño usando setContentView en el método onCreate de mi actividad.
  • Obtener un identificador para el GoogleMap utilizando getMap() .

In onStart:

  • Obtengo algunas coordenadas de lugar de una base de datos SQLite
  • Añadir marcadores correspondientes al mapa
  • Agregue estos puntos a un LatLngBounds.Builder
  • newLatLngBounds(Builder.build(), 10) la cámara usando newLatLngBounds(Builder.build(), 10)

De acuerdo con los mapas de referencia api, no debería llamar newLatLngBounds(LatLngBounds bounds, int padding) antes de asegurarse de que el mapa tiene un tamaño. De hecho, obtener una IllegalStateException en este momento. Pero ¿cuál es el método correcto para esperar hasta que el mapa tenga un tamaño ?

He utilizado con éxito el código siguiente en el pasado:

 final LatLngBounds.Builder builder = new LatLngBounds.Builder(); final View mapView = fragment.getView(); final GoogleMap map = fragment.getMap(): //Add points to builder. And get bounds... final LatLngBounds bounds = builder.build(); // Pan to see all markers in view. // Cannot zoom to bounds until the map has a size. if (mapView.getViewTreeObserver().isAlive()) { mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { public void onGlobalLayout() { mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this); map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50), 1500, null); } }); } 

La solución de rusmus no funcionó para mí. Utilicé esta vez:

  map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { @Override public void onMapLoaded() { map.animateCamera(cameraUpdate); } }); 

Si conoce el tamaño del mapa, puede evitar esperar y mover la cámara antes de que aparezca el mapa. Finalmente utilizamos el tamaño de la pantalla como una aproximación del tamaño del mapa (pero podrías encontrar el tamaño exacto si quieres ser más preciso):

  final DisplayMetrics display = getResources().getDisplayMetrics(); final int padding = display.widthPixels / 20; final CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds( boundsBuilder.build(), display.widthPixels, display.heightPixels, padding); map.moveCamera(cameraUpdate); 

Con los últimos GoogleServices puede utilizar MapFragment.getMapAsync . Directamente desde los documentos

Establece un objeto de devolución de llamada que se activará cuando la instancia de GoogleMap esté lista para utilizarse.

  • Google Maps Android: el mapa de repente no se muestra
  • ROTATE Google-Map para mostrar mi DIRECCIÓN en tiempo real
  • Importar google-play-service dependencia cruz roja
  • Cómo ampliar y agregar marcador a android mapfragment
  • Cómo agregar fragmento de mapa mediante programación
  • Cómo eliminar marcador específico en Android GoogleMap
  • OnMarkerClick no funciona (v2)
  • ¿Qué es el nivel de zoom 15 equivalente a?
  • Cambio de color de los marcadores - Google Map V2 Android
  • Servicios de Google Play que no funcionan en el emulador de Android API Nivel 11
  • ¿Cómo mostrar google maps en la vista 2D?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.