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 ?

3 Solutions collect form web for “Esperando hasta que el mapa google tenga tamaño en un MapFragment”

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 v2 no se muestra después de publicar en el mercado de juegos
  • Dibuja el camino de GoogleMap con 9patch
  • Cómo cambiar el idioma de Google Map V2 para la aplicación para Android
  • ¿Cómo mostrar google maps en la vista 2D?
  • Cómo cargar marcadores dinámicamente para la posición actual en google-maps de Android?
  • MapView en ExpandableListView
  • Google maps V2 - Error de autorización, no puedo mostrar el mapa
  • No se pudo obtener el cliente de la fábrica de conexión - luchando con Google Maps
  • Google Maps API V2 - siempre obtiene error de autenticación
  • Obtener latitud y longitud utilizando código postal
  • Android studio v0.3.2, gradle, google maps v2.0 No encontró la clase "com.google.android.gms.maps.MapFragment
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.