Je ne parviens pas à ramener la caméra Google Maps à sa position initiale. Fondamentalement, j'ai un bouton d'accueil sur la barre Action. Si un utilisateur fait défiler la carte et appuie sur le bouton Accueil, je souhaite que la caméra revienne à son emplacement d'origine.
J'obtiens les coordonnées d'origine avec googleMap.getCameraPosition().target
, mais la caméra ne bouge pas.
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
LatLng initialLoc= mMap.getCameraPosition().target;
CameraUpdate update = CameraUpdateFactory.newLatLng(initialLoc);
CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);
mMap.moveCamera(update);
mMap.animateCamera(zoom);
return true;
}
map.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:tools="http://schemas.Android.com/tools"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<fragment
xmlns:map="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/map"
tools:context="org.test"
Android:name="com.google.Android.gms.maps.SupportMapFragment"
map:cameraTargetLat="xxx.xxx"
map:cameraTargetLng="xxx.xxx"
map:cameraZoom="15"
map:mapType="normal" />
</RelativeLayout>
Qu'est-ce qui me manque?
Chaque fois que l'utilisateur sélectionne l'option, vous utilisez
LatLng initialLoc= mMap.getCameraPosition().target;
pour obtenir l'emplacement supposé initial, ce qui est faux! mMap.getCameraPosition (). target renvoie l'emplacement que pointe la caméra. Vous devriez stocker le dernier long dans la onCreate()
de l'activité ou à un autre endroit selon votre autre code, puis utiliser la même chose dans onOptionItemSelected()
.
Btw vous pouvez combiner le zoom et lat long dans une seule déclaration comme suit.
LatLng coordinate = new LatLng(lat, lng); //Store these lat lng values somewhere. These should be constant.
CameraUpdate location = CameraUpdateFactory.newLatLngZoom(
coordinate, 15);
mMap.animateCamera(location);
METTRE &AGRAVE; JOUR
Je ne sais pas vraiment à quel point cela serait précis ni quand l'appeler. Mais vous pouvez utiliser le même code
LatLng initialLoc= mMap.getCameraPosition().target;
Appelez plutôt ceci une fois dans votre onCreate()
ou onResume()
, puis stockez-le à cet endroit. Ensuite, dans votre optionsItemSelected()
, utilisez ces valeurs la prochaine fois. Bien que, pourquoi ne pas simplement stocker les valeurs que vous avez définies dans votre code XML dans du code Java et ensuite les utiliser?
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
markerOptions.title(totalAddress); //Here Total Address is address which you want to show on marker
mMap.clear();
markerOptions.icon(
BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_Azure));
markerOptions.getPosition();
mCurrLocationMarker = mMap.addMarker(markerOptions);
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(11));