Kiedy moja mapa jest wyświetlana, zawsze zaczyna się w określonym miejscu (w pobliżu Afryki).
Następnie używam następującego kodu, aby wyśrodkować mapę do wybranej lokalizacji.
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));
Moje pytanie brzmi, czy mogę ustawić domyślną lokalizację i poziom powiększenia, zanim mapa się wyświetli?
Ponieważ nie chcę, aby moi użytkownicy widzieli animację na początku.
Dzięki.
android
google-maps
google-maps-api-3
dong221
źródło
źródło
moveCamera
jest najlepszym rozwiązaniem na toOdpowiedzi:
możesz użyć tego do bezpośredniego powiększenia bez animacji:
map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );
źródło
MyLocation
, abym mógł przesunąć i powiększyć mapę do lokalizacji użytkownika. Ponieważ mapa jest zainicjowana w XML, nie mogę dowiedzieć się, jak zapobiec skoku. Idealnie byłoby ukryć mapę, dopóki nieMyLocation
zostanie znaleziona, a następnie ją pokażę.Spójrz na dokumentację tutaj:
https://developers.google.com/maps/documentation/android-api/map#configure_initial_state
Sposób, w jaki można to zrobić, różni się nieco w zależności od tego, czy dodajesz mapę za pomocą XML, czy programowo. Jeśli używasz XML, możesz to zrobić w następujący sposób:
<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"/>
Jeśli robisz to programowo, możesz wykonać następujące czynności:
CameraPosition cameraPosition = new CameraPosition.Builder() .target(new LatLng(-33, 150)) .zoom(13) .build(); MapFragment.newInstance(new GoogleMapOptions() .camera(camera));
źródło
Unexpected namespace prefix "map" found for tag fragment
Na wypadek, gdybyś chciał załadować program
Google Map
w dowolnym początkowym miejscuLocation
, możesz użyć tego fragmentu kodu,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();
Dodaj ten fragment kodu dla
layout
<RelativeLayout android:id="@+id/rl_map" android:layout_width="fill_parent" android:layout_height="fill_parent" />
Spowoduje to załadowanie bezpośrednio
GoogleMap
w konkretnym miejscu,Location
czyli initialLatLng.źródło
Utworzyłem uchwyt
SupportMapFragment
i ustawiłem govisibility
naView.INVISIBLE
używanieSupportMapFragment.getView().setVisibility()
. Następnie wonLocationChanged
wywołaniu zwrotnym, które implementuje moja klasa, sprawdzam, czyINVISIBLE
i ustawiam wartośćVISIBLE
true. Eliminuje to skoki, które widzisz podczas ładowania, jednocześnie umożliwiając dynamiczną inicjalizację pozycji początkowej. W moim przypadku centruję kamerę wokół lokalizacji użytkownika, więconLocationChanged
jest wywoływana natychmiast z powodusetMyLocationEnabled(true)
.Twoje wymagania mogą być inne, ale tak czy inaczej, musisz po prostu ustawić widoczność,
INVISIBLE
a następnie znaleźć dobre miejsce do ustawieniaVISIBLE
po załadowaniu odpowiednich danych.źródło
możesz użyć bezpośrednio CameraUpdate używając statycznego latlong
LatLong latlong = new LatLong(lat, long); CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15); mGoogleMap.moveCamera(cameraPosition); mGoogleMap.animateCamera(cameraPosition);
źródło