Comment définir l'emplacement et le niveau de zoom par défaut pour Google Map Api v2?

88

Lorsque ma carte s'affiche, elle commence toujours à un emplacement fixe (près de l'Afrique).

Ensuite, j'utilise le code suivant pour centrer la carte sur l'emplacement souhaité.

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 que la carte ne s'affiche?

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

Merci.

dong221
la source
Cette question a aidé .... Même si l'emplacement n'est pas activé ... animateCamera pointe vers quelque part en Afrique ... wiered! ... moveCameraest la meilleure solution pour cela
Devrath
3
hahahhaha ....... + 1 pour cette question, vous avez demandé mon coeur. : D ... "ça commence toujours à un endroit fixe (près de l'Afrique)" ........ rofll ..... merci même si.
akash89
2
@ akash89 Cela commence à LatLng (0.0,0.0) comme prévu: google.com/maps/@0,0,5z Je ne sais pas ce qui vous fait rouler sur le sol en riant littéralement (si je ne me trompe pas), mais Je suis heureux que vous soyez heureux :)
Navid Vafaei

Réponses:

173

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

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
Moh Sakkijha
la source
Merci, c'est juste ce dont j'ai besoin
:)
J'ai la latitude / longitude minimum et la latitude / longitude maximum alors comment régler ???
Pratik Butani
vous pouvez ajouter une nouvelle question pour que je puisse publier la réponse complète pour vous, mais en bref, vous devrez utiliser LatLngBounds.Builder pour créer des limites et l'utiliser.
Moh Sakkijha
1
@Saksak Mon problème est que j'attends que le GPS saisisse MyLocationpour pouvoir déplacer et agrandir la carte vers l'emplacement de l'utilisateur. Comme la carte est initialisée dans le XML, je ne peux pas comprendre comment empêcher le saut de se produire. Idéalement, je cacherais la carte jusqu'à ce qu'elle MyLocationsoit trouvée, puis je la montrerais.
theblang
quand j'ai placé la carte, cela m'a donné une erreur et m'a dit de créer une variable «carte». est-il possible d'importer ou quelque chose?
Hanzawa Naoki
85

Jetez un œil à la documentation ici:

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

La façon de procéder 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));
Anthony
la source
1
Bonne réponse. En fait, celui-ci est plus adapté à cette question.
MightySeal
2
en xml j'obtiens une erreur de peluchesUnexpected namespace prefix "map" found for tag fragment
Muhammad Babar
Si même avec xmlns: map = "schemas.android.com/apk/res-auto" vous avez toujours la même erreur. Essayez d'ajouter ce xmlns: tools = " schemas.android.com/tools " et utilisez "tools:" au lieu de "map:"
Guillaume Ilitch Tchaïkovsky
Lien vers la documentation avec toutes les options: developer.google.com/maps/documentation/android-sdk/…
Albert Vila Calvo
5

Juste au cas où vous voudriez charger Google Mapà n'importe quel Locationprogramme initial , 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" />

Cela se chargera GoogleMapen particulier Locationdirectement, c'est-à-dire initialLatLng.

Jaydipsinh Zala
la source
3

J'ai créé une poignée SupportMapFragmentet l' ai définie visibilitysur View.INVISIBLEusing SupportMapFragment.getView().setVisibility(). Ensuite, dans le onLocationChangedrappel que ma classe implémente, je vérifie si INVISIBLEet je mets à VISIBLEsi vrai. Cela élimine les sauts 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, elle onLocationChangedest donc appelée immédiatement à cause de setMyLocationEnabled(true).

Vos exigences peuvent être différentes, mais dans tous les cas, il vous suffit de définir la visibilité sur INVISIBLE, puis de trouver un bon emplacement à définir une VISIBLEfois que vos données appropriées ont été chargées.

theblang
la source
2

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);
Mahesh Gawhane
la source