2015-08-22 6 views
5

Ich habe Probleme, die Google Maps-Kamera wieder in die ursprüngliche Position zu bringen. Grundsätzlich habe ich einen Home-Button auf der Actionbar. Wenn ein Benutzer auf der Karte scrollt und auf die Home-Taste klickt, möchte ich, dass die Kamera an ihren ursprünglichen Ort zurückkehrt.Wie animiere ich die Kamera an einen bestimmten Ort in Google Maps v2 für Android?

Ich bekomme die ursprünglichen Koordinaten mit googleMap.getCameraPosition().target, aber die Kamera bewegt sich nicht.

@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> 

Was ist es, dass ich fehle?

Antwort

16

Jedes Mal, wenn der Benutzer die Option auswählt, verwenden Sie

LatLng initialLoc= mMap.getCameraPosition().target; 

die angeblich ursprüngliche Lage zu bekommen, was falsch ist! mMap.getCameraPosition().target gibt den Standort zurück, auf den die Kamera zeigt. Sie sollten den Lat lange in der onCreate() der Aktivität oder an einem anderen Ort nach Ihrem anderen Code speichern, und dann das gleiche in onOptionItemSelected() verwenden.

Btw können Sie den Zoom und lat long in einer einzigen Anweisung wie folgt kombinieren.

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

UPDATE

ich wirklich so weiß nicht, wie genau das, oder sein würde, wenn es zu nennen. Aber man könnte den gleichen Code

LatLng initialLoc= mMap.getCameraPosition().target; 

Verwenden Sie stattdessen dieses eine Mal rufen in Ihrem onCreate() oder onResume() und es dann dort zu speichern. Dann nimm nächstes Mal in deinem optionsItemSelected() diese Werte. Warum speichern Sie die Werte, die Sie in Ihrem XML definiert haben, einfach in Java-Code und verwenden Sie sie dann?

+0

Sie haben Recht! Wie könnte ich die Anfangskoordinaten meiner Kamera erhalten? Die Anfangskoordinaten meiner Kamera wurden in meiner .xml mit 'cameraTargetLat' und' cameraTargetLat' definiert. Wie kann ich das programmatisch abrufen? – Pangu

+0

Über welche XML sprichst du? – Antrromet

+0

Ich habe meinen Post aktualisiert, ich möchte den Zielpunkt lat der Kamera abrufen, ohne neue Konstanten für die Koordinaten zu definieren. Ist es möglich, diese Werte programmgesteuert aus der XML-Datei abzurufen? – Pangu

Verwandte Themen