2016-01-08 7 views
6

Wenn Sie sich die Google-Navigation ansehen, bleibt der Fahrer-Marker immer unten, und wenn Sie die Kamera bewegen, wird sie zurückgesetzt. Ich frage mich, wie man dasselbe mit einem Marker erreichen kann.Google Maps - Kameraposition mit Markierung am unteren Rand

There was a similar question before, aber die angebotenen Antworten betrachten die Karte nicht als geneigt, was zu einer falschen Projektion führt.

enter image description here

+0

poste deine layout.xml-Datei. –

+0

@ChiragSavsani warum? Dies hat nichts mit dem Layout zu tun, vorausgesetzt, ein Support-Map-Fragment wird in ein Framelayout geladen. – Nima

Antwort

2

Nima, gibt es verschiedene Wege, dieses Verhalten zu erreichen, indem sie Werte in Kamerapositionen zwicken.

Zum Beispiel haben Sie 2 geo location latlng Informationen zur Verfügung, UserLocation und DestinationLocation finden den Mittelpunkt dieses Ortes und setzen das Kameraziel auf diesen. Und dann können Sie die Kamera auf Zoom-Ebene verschieben, die beide Geolocation mit der richtigen Polsterung von oben und unten abdecken, indem Sie den Peilungswert angeben.

//First build the bounds using the builder 
    LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
    LatLngBounds bounds; 
    builder.include(userLocation); 
    builder.include(destinationLocation); 
    bounds = builder.build(); 
    // define value for padding 
    int padding =20; 
    //This cameraupdate will zoom the map to a level where both location visible on map and also set the padding on four side. 
    CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds,padding); 
    mMap.moveCamera(cu); 

    // now lets make the map rotate based on user location 
    // for that we will add the bearing to the camera position. 
    //convert latlng to Location object 
    Location startLocation = new Location("startingPoint"); 
    startLocation.setLatitude(userLocation.latitude); 
    startLocation.setLongitude(userLocation.longitude); 

    Location endLocation = new Location("endingPoint"); 
    endLocation.setLatitude(destinationLocation.latitude); 
    endLocation.setLongitude(destinationLocation.longitude); 

    //get the bearing which will help in rotating the map. 
    float targetBearing = startLocation.bearingTo(endLocation);    

    //Now set this values in cameraposition 
    CameraPosition cameraPosition = new CameraPosition.Builder() 
      .target(bounds.getCenter()) 
      .zoom(mMap.getCameraPosition().zoom) 
      .bearing(targetBearing) 
      .build(); 
    mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
+0

Das beantwortet meine Frage nicht. Wie Sie auf dem Screenshot sehen können, ist die "endLocation" nicht in der Ansicht, daher ist die einfache LatLngBounds nicht das, was ich suche. – Nima

+0

gut Sie können immer einen anderen Ort anstelle des Zielortes einstellen, betrachten Sie Ihr Bild hier können Sie den Ort verwenden der nächsten Runde oder nächsten 100 Meter Geopunkt. Die Lösung ist das Einstellen der richtigen Zoomstufe und das richtige Peilung oder versuchen Sie, die Lösung zu finden, wo Sie zuerst das Kameraziel auf userlocation setzen, das den Kartenfokus auf den Benutzermarker bringt und ihn in die Mitte des Bildschirms bringt und dann bewegt Die Kamera wird erneut zur oberen Hälfte des Kartenbildschirms xy zur Projektion der Karte gedreht. Durch Setzen dieses Ziels wird die Markierung unten verschoben. –

+0

http://stackoverflow.com/questions/16764002/how-to-center-the-camera-so-that-marker-is-at-the-bottom-of-screen-google-map Dieser Link wird Ihnen helfen wie man den Fokus der Kamera so einstellt, dass der Marker am unteren Bildschirmrand erscheint. –

1

Der aktuelle Standort Marker immer auf der Unterseite des Bildschirms während der Bewegung auch. Dafür haben wir

map.setPadding(0,320,0,0); 

So setzen, setzen wir oben auf der Karte pdding 320 dann dauert es etwas Raum vom oberen Rand des Bildschirms. In Ihrem endgültigen Code wie dieser

CameraPosition cameraPosition = new CameraPosition.Builder() 
           .target(newLatLng)       
           .zoom(18)       
           .bearing(0)    
           .tilt(0)   
           .build(); 
       map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
       map.setPadding(0,320,0,0); 
+0

Du hast meinen Tag gemacht –