2016-01-08 12 views
6

Jeśli spojrzysz na nawigację w Google, zawsze trzyma znacznik kierowcy blisko dołu, a po przeniesieniu kamery oferuje resetowanie go z powrotem na dół. Zastanawiam się, jak osiągnąć to samo, co znacznik.Mapy Google - pozycja kamery z markerem u dołu

There was a similar question before, ale proponowane odpowiedzi nie uwzględniają nachylonej mapy, co skutkuje nieprawidłową projekcją.

enter image description here

+0

opublikuj plik layout.xml. –

+0

@ChiragSavsani dlaczego? nie ma to nic wspólnego z układem, zakładamy, że fragment mapy wsparcia jest ładowany do frarmayout. – Nima

Odpowiedz

2

Nima, istnieje inny sposób na osiągnięcie tego zachowania przez szczypanie wartości w pozycjach aparatu.

Na przykład masz dostęp do 2 informacji o lataniu geograficznym dostępnych dla ciebie, lokalizacji użytkownika i lokalizacji docelowej, znajdź punkt środkowy tej lokalizacji i ustaw dla niej cel kamery. Następnie możesz przesunąć kamerę na poziom powiększenia, który obejmuje geolokalizację z odpowiednim wypełnieniem górą i dołem, określając wartość namiaru.

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

To nie odpowiada na moje pytanie. Jak widać na zrzucie ekranu, "endLocation" nie jest w widoku, dlatego proste LatLngBounds nie jest tym, czego szukam. – Nima

+0

cóż, zawsze możesz ustawić dowolną inną lokalizację zamiast lokalizacji docelowej, rozważ obraz tutaj, możesz użyć lokalizacji następnego zakrętu lub następnego punktu geo 100 metrów. Rozwiązaniem jest ustawienie prawidłowego poziomu zoomu i ustawienie właściwego łożyska lub próba znalezienia rozwiązania, w którym najpierw ustawiłeś cel kamery na lokalizację użytkownika, co spowoduje, że mapa skupi się na znaczniku użytkownika i ustawi go na środku ekranu, a następnie przesunie kamera ponownie do górnej połowy ekranu mapy xy do projekcji mapy, ustawiając ten cel przesunie znacznik na dole. –

+0

http://stackoverflow.com/questions/16764002/how-to-center-the-camera-so-that-marker-is-at-the-bottom-of-screen-google-map Ten link pomoże Ci jak ustawić ostrość kamery w taki sposób, aby znacznik pojawił się u dołu ekranu. –

1

Aktualny znacznik położenia zawsze na dole ekranu podczas przenoszenia. Do tego musimy ustawić

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

Więc ruszyliśmy pdding szczyt na mapie 320 to zajmuje trochę miejsca z górnej części ekranu. W ostatecznym kodzie takim jak to

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

Zrobiłeś mój dzień –

Powiązane problemy