Android: Google MapView muestra un indicador de progreso mientras se está cargando el mapa

¿Hay una manera de escuchar si un MapView sigue cargando? Porque quiero mostrar un indicador de progreso (como un reloj de arena) mientras MapView está descargando los mosaicos del mapa.

¿Alguna solución?

La documentación de OnDraw para MapView dice

"Dibujamos el fondo del mapa (cargando los azulejos según corresponda)"

Usted podría intentar extender MapView y ocultar el indicador de progreso como fin de onDraw. Pero supongo que los MapTiles se cargarán de forma asíncrona para que tu barra de progreso termine antes de cargar todos los MapTiles.

Puede utilizar OnCameraChangeListener y OnMapLoadedCallback para simular este comportamiento.

De la documentación de GoogleMap.OnCameraChangeListener :

Public abstract void onCameraChange (posición de posición de cámara)

Se llama después de que la posición de la cámara haya cambiado. Durante una animación, este oyente no puede ser notificado de las posiciones intermedias de la cámara. Siempre se llama a la posición final en la animación.

Esto se llama en el hilo principal.

De la documentación de GoogleMap.OnMapLoadedCallback :

Public abstract void onMapLoaded ()

Se llama cuando el mapa ha terminado de procesar. Esto sólo se llamará una vez. Debe solicitar otra devolución de llamada si desea que se le notifique de nuevo.

Como se ha dicho, onMapLoaded() sólo se llamará una vez, por lo que la estrategia podría ser solicitar un GoogleMap.OnMapLoadedCallback cada vez que se llama onCameraChange .

Aquí hay un ejemplo (muy simple) para ilustrar la respuesta:

 public class MapsActivity extends FragmentActivity implements OnCameraChangeListener, OnMapLoadedCallback { private GoogleMap googleMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); googleMap = mapFragment.getMap(); googleMap.setOnCameraChangeListener(this); } @Override public void onMapLoaded() { //TODO: Hide your progress indicator } @Override public void onCameraChange(final CameraPosition cameraPosition) { googleMap.setOnMapLoadedCallback(this); //TODO: Show your progress indicator } } 

No hay API directa para hacer esto en la implementación de MapView actual.

  • Varias ventanas de información en Android Maps API 2
  • En google maps V2 ... fragment.getMap () devuelve null
  • Android Google MapView muestra sólo los mosaicos vacíos
  • Google Maps: LocationSource personalizado en iOS
  • Cómo obtener una clave de versión de Google Maps API v2
  • Pantalla gris de la API de Google Maps v2
  • ¿Una clave API de Google Maps caduca después de un tiempo determinado?
  • Google maps - posición de la cámara con marcador en la parte inferior
  • Google mapa cuestión incluso todos los ajustes son correctos según google doc
  • Android googlemaps V2 - Desactivar desplazamiento en panorámica o zoom
  • Google NavigationDrawer no dibuja correctamente en el mapa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.