Google Maps Android API v2 – restaurar el estado del mapa
Estoy construyendo una aplicación de mapa muy simple usando Google Maps Android API v2. Como era de esperar, cuando el usuario abandona y luego regresa a la aplicación, los cambios que hayan realizado en la ubicación, el zoom, etc. se pierden a medida que la actividad se destruye y se vuelve a crear.
Sé que puedo guardar el estado de la cámara del mapa de forma programática (tal vez como valores en las preferencias compartidas) en onPause()
y restaurarlo en onResume()
, pero ¿tiene el API algún mecanismo incorporado para mantener el estado del mapa entre los lanzamientos de actividad?
- Android google maps con marcadores 3D?
- ClusterManager en GoogleMap android
- Supresión del cuadro de diálogo de selección de intenciones de Google Maps
- Cómo crear mapas que detectan la ubicación automática en React-Native
- ¿Cómo se establece el lenguaje de etiquetas de mapa en Google Maps Android API v2
- Girar (girar) la posición del marcador en función de la dirección sobre la ruta
- Obtener la distancia entre dos puntos geográficos
- Ampliar mapaVer a un cuadro delimitador en osmdroid
- Mapas androides: cómo determinar el centro del mapa después de que se ha completado un arrastre
- Google Maps v2 android, ventana de información no se destacan en el color de resaltado por defecto en el clic?
- Google Maps Android API v2 - Código de ejemplo se bloquea
- ¿Cómo implementar la funcionalidad de búsqueda para Google Map Api V2 Android?
No creo que puedas, pero puedes guardar tu CameraPosition
que tiene tu Position / Zoom / Angle …
http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
Por lo que puede escribir una función en su onDestroy
que obtiene la CameraPosition
de su mapa y lo almacena en SharedPreferences
. En su onCreate()
, CameraPosition
a crear su CameraPosition
desde SharedPreferences
(después de instanciar su mapa).
// somewhere in your onDestroy() @Override protected void onDestroy() { CameraPosition mMyCam = MyMap.getCameraPosition(); double longitude = mMyCam.target.longitude; (...) SharedPreferences settings = getSharedPreferences("SOME_NAME", 0); SharedPreferences.Editor editor = settings.edit(); editor.putDouble("longitude", longitude); (...) //put all other values like latitude, angle, zoom... editor.commit(); }
En su onCreate()
SharedPreferences settings = getSharedPreferences("SOME_NAME", 0); // "initial longitude" is only used on first startup double longitude = settings.getDouble("longitude", "initial_longitude"); (...) //add the other values LatLng startPosition = new LatLng() //with longitude and latitude CameraPosition cameraPosition = new CameraPosition.Builder() .target(startPosition) // Sets the center of the map to Mountain View .zoom(17) // Sets the zoom .bearing(90) // Sets the orientation of the camera to east .tilt(30) // Sets the tilt of the camera to 30 degrees .build(); // Creates a CameraPosition from the builder
Crear una nueva cámaraPosition y animarla. Estar seguro, el mapa es instanziated en ese punto
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
No hay nada en la API para este caso de uso.
Puede probar esta biblioteca: https://github.com/fsilvestremorais/android-complex-preferences
No será tan eficiente como sólo escribir un montón de SharedPreferences.Editor.put...
para los valores de CameraPosition
en onPause
, ya que utiliza Gson internamente, pero ahorra tiempo si tiene un objeto más complejo para guardar y restaurar.
De todos modos, también puede publicar una solicitud de función en gmaps-api-issues (o Android Maps Extensions ). Sin duda es algo que falta para persistir objetos simples ( CameraPosition
, LatLng
, LatLngBounds
) con facilidad.