¿Cómo configuro la ubicación predeterminada y el nivel de zoom para la API de Google Map v2?

91

Cuando se muestra mi mapa, siempre comienza en una ubicación fija (cerca de África).

Luego, uso el siguiente código para centrar el mapa en la ubicación que quiero.

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

Mi pregunta es: ¿podría establecer una ubicación y un nivel de zoom predeterminados antes de que se muestre el mapa?

Porque no quiero que mis usuarios vean la animación al principio.

Gracias.

dong221
fuente
Esta pregunta ayudó ... Incluso si la ubicación no está habilitada ... animateCamera apunta a algún lugar de África ... ¡wiered! ... moveCameraes la mejor solución para esto
Devrath
3
hahahhaha ....... + 1 para esta pregunta, me lo pediste con todo el corazón. : D ... "siempre comienza en una ubicación fija (cerca de África)" ........ rofll ..... aunque gracias.
akash89
2
@ akash89 Comienza desde LatLng (0.0,0.0) como se esperaba: google.com/maps/@0,0,5z No estoy seguro de qué te hace rodar por el suelo riendo literalmente (si no me equivoco), pero Estoy feliz de que estés feliz :)
Navid Vafaei

Respuestas:

175

puede usar esto para hacer zoom directamente sin la animación:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
Moh Sakkijha
fuente
Gracias, es justo lo que necesito
:)
tengo latitud / longitud mínima y latitud / longitud máxima, entonces, ¿cómo configurar?
Pratik Butani
puede agregar una nueva pregunta para que pueda publicar la respuesta completa por usted, pero en resumen, tendrá que usar LatLngBounds.Builder para construir límites y usar eso.
Moh Sakkijha
1
@Saksak Mi problema es que estoy esperando que el GPS agarre MyLocationpara poder mover y acercar el mapa a la ubicación del usuario. Dado que el mapa se inicializa en XML, no puedo averiguar cómo evitar que ocurra el salto. Idealmente, escondería el mapa hasta que MyLocationse encuentre y luego lo muestre.
theblang
cuando coloqué el mapa me dio un error y me dijo que creara un 'mapa' variable. ¿Es posible importar o algo así?
Hanzawa Naoki
86

Eche un vistazo a la documentación aquí:

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

La forma de hacerlo es ligeramente diferente dependiendo de si está agregando el mapa a través de XML o mediante programación. Si está utilizando XML, puede hacerlo de la siguiente manera:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

Si lo está haciendo mediante programación, puede hacer lo siguiente:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));
Antonio
fuente
1
Buena respuesta. En realidad, este es más adecuado para esta pregunta.
MightySeal
2
en xml obtengo un error de pelusaUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar
Si incluso con xmlns: map = "schemas.android.com/apk/res-auto" todavía tiene el mismo error. Intente agregar este xmlns: tools = " schemas.android.com/tools " y use "tools:" en lugar de "map:"
Guillaume Ilitch Tchaïkovsky
Enlace a la documentación con todas las opciones: developers.google.com/maps/documentation/android-sdk/…
Albert Vila Calvo
estaba buscando atributos de diseño, funciona perfectamente. gracias
Abhishek Garg
5

En caso de que desee cargar Google Mapen cualquier momento inicial mediante Locationprogramación, puede usar este fragmento de código,

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

Agregue este fragmento de código para layout

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

Esto se cargará GoogleMapen particular Locationdirectamente, es decir, initialLatLng.

Jaydipsinh Zala
fuente
3

He creado un identificador para SupportMapFragmenty establecer su visibilitya View.INVISIBLEutilizar SupportMapFragment.getView().setVisibility(). Luego, en la onLocationChangeddevolución de llamada que implementa mi clase, verifico si INVISIBLEy configuro VISIBLEsi es verdadero. Esto elimina los saltos que ve con carga y le permite inicializar dinámicamente la posición inicial. En mi caso, estoy centrando la cámara alrededor de la ubicación del usuario, por lo que onLocationChangedse llama inmediatamente debido a setMyLocationEnabled(true).

Sus requisitos pueden ser diferentes, pero de cualquier manera solo necesita configurar la visibilidad INVISIBLEy luego encontrar un buen lugar para configurar VISIBLEdespués de que se hayan cargado los datos apropiados.

theblang
fuente
2

puedes usar CameraUpdate directamente usando static latlong

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
Mahesh Gawhane
fuente