web-dev-qa-db-fra.com

Comment animer la caméra vers un emplacement spécifié dans Google Maps v2 pour Android?

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?

8
Pangu

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?

25
Antrromet
     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)); 
0
SUBODH KUMAR