web-dev-qa-db-de.com

Wie lege ich den Standardspeicherort und die Zoomstufe für Google Map API v2 fest?

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.

85
dong221

sie können dies verwenden, um direkt ohne die Animation zu zoomen:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
168
Moh Sakkijha

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

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.

5
Jaydipsinh Zala

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.

3
theblang

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);
2
Mahesh Gawhane