2017-07-19 2 views
0

Ich habe mir alles angesehen, was ich auf diesem finden kann, und habe keine Lösung gefunden. Ich versuche, etwas sehr einfaches zu tun:Android Google Map verschieben Kamera funktioniert nicht

protected void moveCamera(final LatLng position, final float zoom) { 
    getMap(new OnMapReadyCallback() { 
     @Override 
     public void onMapReady(final GoogleMap googleMap) { 

      logger.debug("Moving map to " + position); 
      CameraPosition cameraPosition = new CameraPosition.Builder() 
        .target(position) 
        .zoom(zoom) 
        .build(); 
      googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

     } 
    }); 
} 

Nichts passiert. Keine Fehler, keine Kamerabewegung. Ich habe auch moveCamera stattdessen versucht. Ich habe verschiedene Arten von Anrufen an CameraUpdateFactory ausprobiert, ich habe versucht, separat zu bewegen und zu zoomen, ich habe versucht, mit einer Handler mit einer Verzögerung zu buchen. Manchmal funktioniert das perfekt, aber wenn ich das Fragment mit der Karte verlasse und zurückkomme, funktioniert es nicht. Die Karte wird auf den Breitengrad 0,0 und den Standardkarten-Typ zurückgesetzt (es wurde auf Hybrid gesetzt) ​​und ich kann nichts erreichen. Ich weiß, dass die Methode durch Logging-Anweisungen aufgerufen wird. Gibt es irgendeine Art von Lebenszyklus, die ich tun muss, um sicherzustellen, dass die Karte wiederhergestellt werden kann?

Ich würde wirklich lieber nicht zu Mapbox oder etwas wechseln, weil das eine Menge Arbeit wäre, um einen kleinen Fehler zu beheben, aber ich muss das richtig funktionieren.

Antwort

0

Ich habe die folgende und es funktioniert gut verwendet:

GoogleMap mGoogleMap; 

LatLngBounds bounds = builder.build(); 
int width = getResources().getDisplayMetrics().widthPixels; 
int height = getResources().getDisplayMetrics().heightPixels; 
height = Math.round(0.45f*height); 
int padding = (int) (width * 0.10); 


CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds,width,height,padding); 

// Add this where you want to move map camera 
mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng("<pass_LatLng_here")); 
mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(14)); //set the zoom level here 
+0

Warum Sie eine 'CameraUpdate' erstelle und dann ist es nicht benutzen? – nasch

+0

Wenn ich nur die 'moveCamera' und' animateCamera' Teile verwende, tut das nichts. 'LatLngBounds bounds = LatLngBounds.builder(). Build()' (was vermutlich der Fall war, weil 'builder' in Ihrem Code-Snippet nicht definiert war) erzeugt diesen Fehler:' java.lang.IllegalStateException: no included points ' – nasch

Verwandte Themen