W tym temacie opisujemy, jak skonfigurować mapę, która została dodana do aplikacji na Androida za pomocą pakietu Maps SDK na Androida.
Omówienie
Po dodaniu mapy do aplikacji możesz skonfigurować początkowe i czasowe działanie aplikacji
ustawienia mapy. Ustawienia początkowe muszą być skonfigurowane na podstawie tego, czy
dodany przez Ciebie kontener mapy (SupportMapFragment
lub
MapView
) statycznie lub dynamicznie. Jeśli kontener mapy został
dodane statycznie, można skonfigurować początkowe ustawienia mapy w pliku układu.
Jeśli została dodana dynamicznie, możesz skonfigurować ustawienia początkowe w
OnCreate
wywołanie zwrotne z GoogleMapOptions
obiektu.
Szczegółowe informacje o dodawaniu kontenera mapy znajdziesz w artykule Dodawanie mapy.
Początkowe ustawienia mapy obejmują następujące elementy:
- Położenie kamery, w tym lokalizacja, powiększenie, położenie i nachylenie. Szczegółowe informacje na temat pozycjonowania kamery znajdziesz w sekcji Aparat i widok.
- Typ mapy.
- Elementy interfejsu do wyświetlenia, takie jak przyciski powiększania i kompas.
- Gesty, które chcesz włączyć.
- Określa, czy jest włączony tryb uproszczony.
Te ustawienia oraz niektóre ustawienia dodatkowe można skonfigurować w czasie działania
aktualizowanie obiektu GoogleMap
w onMapReady
oddzwanianie. Dodatkowe ustawienia konfiguruje się za pomocą metod
GoogleMap
, na przykład konfigurujące
warstwa natężenia ruchu i dopełnienie mapy.
Przykład
W przykładowym kodzie poniżej i na zrzucie ekranu powyżej mapa jest skonfigurowana z tymi ustawieniami.
Początkowe ustawienia są konfigurowane w pliku układu:
- Włącz elementy sterujące powiększeniem.
- Włącz sterowanie gestami obracania.
- Ustaw pochylenie mapy na 30.
Ustawienia środowiska wykonawczego:
- Wyśrodkuj aparat na Kioto Japan.
- Włącz mapę hybrydową.
- Włącz warstwę natężenia ruchu.
Ustawienia początkowe
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="true" map:uiRotateGestures="true" map:cameraTilt="30" />
Ustawienia środowiska wykonawczego
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Update the map configuration at runtime. @Override public void onMapReady(GoogleMap googleMap) { // Set the map coordinates to Kyoto Japan. LatLng kyoto = new LatLng(35.00116, 135.7681); // Set the map type to Hybrid. googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // Add a marker on the map coordinates. googleMap.addMarker(new MarkerOptions() .position(kyoto) .title("Kyoto")); // Move the camera to the map coordinates and zoom in closer. googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto)); googleMap.moveCamera(CameraUpdateFactory.zoomTo(15)); // Display traffic. googleMap.setTrafficEnabled(true); } }
Zanim zaczniesz
Zanim zaczniesz, możesz skonfigurować projekt i dodać podstawową mapę w następujące opcje:
Utwórz aplikację, korzystając z szablonu Map dla Android Studio. Szablon Mapy automatycznie konfiguruje projekt i dodaje podstawową mapę. Fragment jest używany jako kontener mapy i jest dodawany statycznie. Więcej informacji: krótkie wprowadzenie.
Ręcznie skonfiguruj projekt pod kątem pakietu SDK i dodaj podstawową mapę. Pozwala to użyć dowolnego szablonu Androida mapować na istniejącą aplikację.
Konfigurowanie mapy po jej dodaniu w sposób statyczny
W tej sekcji dowiesz się, jak ustawić początkowy stan mapy, jeśli została ona dodana statycznie na plik układu.
Pakiet Maps SDK na Androida definiuje zestaw niestandardowych atrybutów XML dla elementu SupportMapFragment
lub MapView
, których możesz użyć do skonfigurowania początkowego stanu mapy bezpośrednio z pliku układu. Następujące atrybuty
są aktualnie zdefiniowane:
mapType
– typ mapy do wyświetlenia. Dozwolone wartości tonone
,normal
,hybrid
,satellite
iterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
– początkowe położenie kamery. Zobacz aparat i widoki.uiZoomControls
,uiCompass
– określa, czy elementy sterujące powiększeniem oraz kompas. Więcej informacji:UiSettings
.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
– określa, czy określone gesty są włączone. Więcej informacji znajdziesz w sekcjiUiSettings
.zOrderOnTop
– wskazuje, czy powierzchnia widoku mapy jest wyświetlana na nad oknem mapy, elementy sterujące mapą i dowolny obiekt w oknie. Więcej informacji znajdziesz w metodie SurfaceView.setZOrderOnTop(boolean).useViewLifecycle
– prawidłowa tylko z obiektemSupportMapFragment
. Określa czy cykl życia mapy powinien być powiązany z widokiem fragmentu czy z widokiem fragment tekstu. Szczegółowe informacje znajdziesz tutaj.liteMode
–true
, aby włączyć wersję uproszczoną; w przeciwnym razie:false
.mapColorScheme
– określa schemat kolorów dla mapy zwykłej i terenu. Wartości to m.in.light
(domyślna),dark
ifollow_system
. Oznacza to, że służy do bieżące ustawienie systemu jest oparte na ustawieniu urządzeniaUI_NIGHT_MODE_MASK
. Więcej informacji znajdziesz w artykule Schemat kolorów mapy.
Aby móc używać tych atrybutów niestandardowych w pliku układu, musisz umieścić w nim tę deklarację przestrzeni nazw. Możesz wybrać dowolną przestrzeń nazw,
nie musi być typu map
:
xmlns:map="http://schemas.android.com/apk/res-auto"
Następnie możesz dodać atrybuty z prefiksem map:
do pliku układu.
Ten plik układu konfiguruje obiekt SupportMapFragment
z niestandardowym ustawieniem
atrybutów mapy. Do obiektu MapView
można stosować te same atrybuty, co
cóż.
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:mapColorScheme="dark"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
Konfigurowanie mapy po jej dodaniu dynamicznie
W tej sekcji dowiesz się, jak ustawić początkowy stan mapy, jeśli została ona dodana do aplikacji.
Jeśli SupportMapFragment
lub MapView
został dodany dynamicznie, możesz
ustawić początkowy stan mapy w obiekcie GoogleMapOptions
. Dostępne opcje są takie same jak w pliku układu.
GoogleMapOptions
możesz utworzyć w ten sposób:
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
Następnie skonfiguruj go w ten sposób:
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
Aby zastosować te opcje podczas tworzenia mapy, wykonaj jedną z następujących czynności:
- Jeśli używasz
SupportMapFragment
, użyj statycznej metody fabrycznejSupportMapFragment.newInstance(GoogleMapOptions options)
, aby utworzyć fragment i przekazać ustawienia. - Jeśli używasz parametru
MapView
, KonstruktorMapView(Context, GoogleMapOptions)
i przekazać je w ustawieniach.
Lokalizowanie mapy
Gdy dodasz do aplikacji MapView
lub SupportMapFragment
, elementy tekstowe
są wyświetlane na mapie w odpowiednim języku w zależności od urządzenia użytkownika
ustawienia i lokalizację. Języki używane w aplikacji możesz ograniczyć do
podzbiór wszystkich obsługiwanych języków, dodając element resConfigs
do Gradle.
. Pomaga to wyciąć nieużywane języki. Zmniejsza to także
rozmiar pliku binarnego aplikacji. Na przykład:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
Dowiedz się więcej o lokalizowaniu aplikacji na Androida.
Konfigurowanie warstwy natężenia ruchu
Włączając warstwę natężenia ruchu, możesz wyświetlać na mapie informacje o natężeniu ruchu. Dostępne opcje
włącz i wyłącz warstwę natężenia ruchu, wywołując metodę
setTrafficEnabled()
i pozwala określić, czy warstwa ruchu jest obecnie włączona przez
Wywołując funkcję
isTrafficEnabled()
. Na poniższym zrzucie ekranu widać mapę z włączoną warstwą ruchu.
Ustawianie typu mapy
Aby ustawić typ mapy, wywołaj metodę setMapType
.
Aby na przykład wyświetlić mapę satelitarną:
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Na poniższym obrazie porównano mapy normalne, hybrydowe i terenowe:
Konfigurowanie budynków 3D
W wielu miastach przy oglądaniu z bliska będą widoczne budynki 3D,
na poniższym zdjęciu Vancouver w Kanadzie. Aby wyłączyć budynki 3D,
połączenia
GoogleMap.setBuildingsEnabled(false)
Skonfiguruj ustawienia mapy obiektu
Przy dużym powiększeniu mapy pokazują plany pięter
w obiektach takich jak lotniska, centra handlowe, duże sklepy i środki transportu publicznego.
kilku stacji. Takie plany pięter, zwane mapami obiektów, są wyświetlane w przypadku „normalnych”
i „satelita” typy map (GoogleMap.MAP_TYPE_NORMAL
i
GoogleMap.MAP_TYPE_SATELLITE
). Włączają się one automatycznie, gdy użytkownik
powiększa się i znika po pomniejszeniu mapy.
Powiadomienie o wycofaniu: w przyszłej wersji funkcja ta będzie dostępna tylko w pomieszczeniach.
Mapy będą dostępne tylko na mapie typu normal
. Z tego
przyszła wersja, mapy obiektów nie będą obsługiwane w satellite
,
Mapy terrain
lub hybrid
. Nawet jeśli indoor nie jest obsługiwane, isIndoorEnabled()
będzie nadal zwracać wartość ustawioną za pomocą setIndoorEnabled()
, tak jak to ma miejsce obecnie. Według
domyślna wartość w kolumnie setIndoorEnabled
to true
.
informacje o wersji pozwalają
będziesz otrzymywać powiadomienia, gdy pomoc wewnątrz budynków stanie się niedostępna.
Oto podsumowanie funkcji map obiektów w interfejsie API:
- Możesz wyłączyć mapy obiektów, dzwoniąc
GoogleMap.setIndoorEnabled(false)
Domyślnie mapy obiektów są włączone. Mapy obiektów są wyświetlane na jednej mapie w za jednym razem. Domyślnie jest to pierwsza mapa dodana do Twojej aplikacji. Do wyświetlać mapy obiektów na innej mapie, wyłączyć je na pierwszej mapie, wywołajsetIndoorEnabled(true)
na drugiej mapie. - Aby wyłączyć domyślny selektor poziomu (selektor podłogi), wywołaj funkcję
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
. Więcej informacji znajdziesz w sekcji Korzystanie z mapy. OnIndoorStateChangeListener
– określa detektory, które: które wykrywają ostrość obiektu lub aktywowanie poziomu. w budynku. Więcej informacji znajdziesz w sekcji Korzystanie z mapy.getFocusedBuilding
– pobiera dane budynku, na którym jest nacisk. Następnie możesz znaleźć aktywny poziom, dzwoniąc pod numerIndoorBuilding.getActiveLevelIndex()
- Styl mapy podstawowej nie ma wpływu na mapy obiektów.
Skonfiguruj dopełnienie mapy
W tym filmie pokazujemy przykład dopełnienia mapy.
Mapa Google ma zostać zaprojektowana tak, aby wypełnić cały region zdefiniowany przez jej kontener.
zwykle MapView
lub SupportMapFragment
. Kilka aspektów
wygląd i działanie mapy są określane na podstawie wymiarów jej kontenera:
- Cel kamery będzie odnosić się do środka wyściełanego obszaru.
- Elementy sterujące mapy są umieszczone względem krawędzi mapy.
- Pojawią się informacje prawne, takie jak oświadczenia dotyczące praw autorskich lub logo Google. wzdłuż dolnej krawędzi mapy.
Możesz dodać dopełnienie wokół krawędzi mapy za pomocą
GoogleMap
setPadding()
. Mapa nadal będzie wypełniać cały kontener, ale tekst i pozycjonowanie elementów sterujących, gesty mapy i ruchy kamery będą działać tak, jakby były umieszczone w mniejszym obszarze. Powoduje to następujące zmiany:
- Ruchy kamery wywoływane przez wywołania interfejsu API lub naciśnięcia przycisku (np. kompas, położenie, przyciski powiększenia) są ustawiane względem wyściełanego obszaru.
- Metoda
getCameraPosition
zwraca środek obszaru dopełnionego. - Metody
Projection
igetVisibleRegion
zwracają region z dopełnieniem. - Elementy sterujące interfejsu są przesunięte od krawędzi kontenera o wyznaczoną liczbę pikseli.
Dopełnienie może być pomocne przy projektowaniu interfejsów, które nakładają się mapy. Na poniższej ilustracji mapa jest wyściełana u góry i wzdłuż krawędzie po prawej stronie. Widoczne elementy sterujące mapą oraz tekst prawny będzie wyświetlany dopełnionego obszaru, który jest wyświetlany na zielono, podczas gdy do wypełnienia całego kontenera, zaznaczonych na niebiesko. W tym przykładzie możesz użyć funkcji pływającej z prawej strony mapy bez zasłaniania elementów sterujących mapy.
Schemat kolorów mapy
W przypadku map typu normalnego i terenu możesz ustawić schemat kolorów mapy dynamicznie na ciemne lub jasne albo zgodnie z bieżącym ustawieniem systemu. Przykład: możesz przyciemnić lub rozjaśnić schemat kolorów mapy w zależności od pory dnia lub do użytku wewnątrz i na zewnątrz.
Domyślnie mapa używa trybu jasnego. Obecna wartość ustawienia systemu zależy od
w ustawieniu urządzenia UI_NIGHT_MODE_MASK
.
Kotlin
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
Java
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));
Schemat kolorów możesz przełączać za pomocą
GoogleMap.setMapColorScheme()
aby ustawić bieżący styl na tryb ciemny lub jasny lub zgodnie z systemem
ustawieniach.
Kotlin
googleMap.setMapColorScheme(MapColorScheme.DARK) googleMap.setMapColorScheme(MapColorScheme.LIGHT) googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)
Java
googleMap.setMapColorScheme(MapColorScheme.DARK); googleMap.setMapColorScheme(MapColorScheme.LIGHT); googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);