web-dev-qa-db-fra.com

Comment définir l'emplacement et le niveau de zoom par défaut pour google map api v2?

Lorsque ma carte est affichée, elle commence toujours à un endroit fixe (près de l’Afrique).

Ensuite, j’utilise le code suivant pour centrer la carte sur l’emplacement de mon choix.

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

Ma question est la suivante: pourrais-je définir un emplacement et un niveau de zoom par défaut avant l'affichage de la carte?

Parce que je ne veux pas que mes utilisateurs voient l'animation au début.

Merci.

85
dong221

vous pouvez l'utiliser pour zoomer directement sans l'animation:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
168
Moh Sakkijha

Jetez un coup d'œil à la documentation ici:

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

La façon de le faire est légèrement différente selon que vous ajoutez la carte via XML ou par programme. Si vous utilisez XML, vous pouvez le faire comme suit:

<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 vous le faites par programme, vous pouvez effectuer les opérations suivantes:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));
83
Anthony

Juste au cas où vous voudriez charger Google Map à tout début Location par programme, vous pouvez utiliser ce morceau de code,

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();

Ajoutez ce morceau de code pour layout

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

Ceci chargera GoogleMap en particulier Location directement, c'est-à-dire, initialLatLng.

5
Jaydipsinh Zala

J'ai créé un descripteur sur SupportMapFragment et lui ai attribué le visibility sur View.INVISIBLE À l'aide de SupportMapFragment.getView().setVisibility(). Ensuite, dans le callback onLocationChanged que ma classe implémente, je vérifie si INVISIBLE et lui attribue la valeur VISIBLE si la valeur est true. Cela supprime le saut que vous voyez en charge tout en vous permettant d'initialiser dynamiquement la position de départ. Dans mon cas, je centre la caméra autour de l'emplacement de l'utilisateur, donc onLocationChanged est appelé immédiatement à cause de setMyLocationEnabled(true).

Vos exigences peuvent être différentes, mais dans tous les cas, vous devez simplement définir la visibilité sur INVISIBLE, puis trouver un bon emplacement pour définir VISIBLE après le chargement des données appropriées.

3
theblang

vous pouvez utiliser directement CameraUpdate en utilisant latlong statique

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