Wenn meine Karte angezeigt wird, beginnt sie immer an einem festen Ort (in der Nähe von Afrika).
Dann benutze ich den folgenden Code, um die Karte auf den gewünschten Ort zu zentrieren.
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));
Meine Frage ist, ob ich einen Standardstandort und eine Zoomstufe festlegen kann, bevor die Karte angezeigt wird.
Weil ich nicht möchte, dass meine Benutzer die Animation am Anfang sehen.
Vielen Dank.
sie können dies verwenden, um direkt ohne die Animation zu zoomen:
map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
Schauen Sie sich die Dokumentation hier an:
https://developers.google.com/maps/documentation/Android-api/map#configure_initial_state
Die Vorgehensweise unterscheidet sich geringfügig, je nachdem, ob Sie die Karte über XML oder programmgesteuert hinzufügen. Wenn Sie XML verwenden, können Sie dies wie folgt tun:
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.SupportMapFragment"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"/>
Wenn Sie es programmgesteuert ausführen, können Sie Folgendes ausführen:
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(-33, 150))
.zoom(13)
.build();
MapFragment.newInstance(new GoogleMapOptions()
.camera(camera));
Nur für den Fall, dass Sie Google Map
Programmgesteuert an einer beliebigen Stelle Location
laden möchten, können Sie diesen Code verwenden.
FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
.target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
.zoom(zoom_level)
.build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();
Fügen Sie diesen Code für layout
hinzu
<RelativeLayout
Android:id="@+id/rl_map"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />
Dadurch wird GoogleMap
bei bestimmten Location
direkt geladen, d. H. InitialLatLng.
Ich habe ein Handle für SupportMapFragment
erstellt und dessen visibility
mit SupportMapFragment.getView().setVisibility()
auf View.INVISIBLE
Gesetzt. Dann überprüfe ich in dem von meiner Klasse implementierten Rückruf onLocationChanged
, ob INVISIBLE
und setze ihn auf VISIBLE
, wenn er wahr ist. Dies beseitigt das Springen, das Sie unter Last sehen, und ermöglicht es Ihnen, die Startposition dynamisch zu initialisieren. In meinem Fall zentriere ich die Kamera um den Standort des Benutzers, daher wird onLocationChanged
sofort wegen setMyLocationEnabled(true)
aufgerufen.
Ihre Anforderungen mögen unterschiedlich sein, aber in beiden Fällen müssen Sie nur die Sichtbarkeit auf INVISIBLE
setzen und dann einen geeigneten Ort finden, um VISIBLE
zu setzen, nachdem Ihre entsprechenden Daten geladen wurden.
sie können CameraUpdate direkt mit statischer Latlong verwenden
LatLong latlong = new LatLong(lat, long);
CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
mGoogleMap.moveCamera(cameraPosition);
mGoogleMap.animateCamera(cameraPosition);