2012-08-30 11 views

Respuesta

2

La documentación onDraw para MapView dice

"se dibuja el mapa de fondo (azulejos de carga según el caso)"

usted podría intentar extender MapView y ocultar indicador de progreso como acabados onDraw. Pero supongo que los MapTiles se cargan de forma asíncrona para que la barra de progreso termine antes de que se carguen todos los MapTiles.

+0

Oye, ¿tienes una solución actualizada? thx –

+0

No lo siento, no he hecho ningún desarrollador de Android desde hace unos años. –

0

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

4

Puede usar OnCameraChangeListener y OnMapLoadedCallback para simular este comportamiento.

De the documentation de GoogleMap.OnCameraChangeListener:

public abstract void onCameraChange (posición CameraPosition)

Llamado después de la posición de la cámara ha cambiado. Durante una animación, , este oyente puede no ser notificado de las posiciones intermedias de la cámara. Es siempre se llama para la posición final en la animación.

Esto se invoca en el hilo principal.

De the documentation de GoogleMap.OnMapLoadedCallback:

public abstract void onMapLoaded()

llama cuando el mapa ha terminado la representación. Esto solo se llamará una vez. Debe solicitar otra devolución de llamada si desea recibir una notificación de nuevo .

Como se indica allí, onMapLoaded() se llama solamente una vez, por lo que la estrategia podría ser la de solicitar una GoogleMap.OnMapLoadedCallback cada vez que el onCameraChange se llama.

Aquí está 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 
    } 
} 
+0

Definitivamente lo que estaba buscando. Parece que se requiere demasiado tiempo para 'onMapLoaded()', pero es porque el mapa carga todos los lugares, etc. Definitivamente es la API correcta. ¡Gracias! Debe ser la respuesta aceptada en mi humilde opinión. –

Cuestiones relacionadas