W tym artykule opisujemy, jak dodać podstawową mapę do aplikacji na Androida po skonfigurował projekt tak, aby używał pakietu Maps SDK na Androida. Po dodając mapę, możesz zmienić typ mapy i jej funkcje.
Omówienie
Maps SDK na Androida udostępnia kilka klas, których Twoja aplikacja może używać zarządzania cyklem życia, funkcjami i danymi mapy. Użytkownik, którego zajęcia są powiązane z zajęciami interakcje w oparciu o model interfejsu Androida, takie jak ustawienie początkowego stanu mapy i reagowanie na gesty wpisywane przez użytkownika w czasie działania.
Główny interfejs i klasy do obsługi map:
GoogleMap
– punkt wejścia do zarządzania elementami i danymi mapy. Aplikacja ma dostęp do obiektuGoogleMap
dopiero wtedy, gdy otrzymała – pobrano z obiektuSupportMapFragment
lubMapView
.SupportMapFragment
– fragment do zarządzania cyklem życia obiektuGoogleMap
.MapView
– widok do zarządzania cyklem życia produktuGoogleMap
obiekt.OnMapReadyCallback
– interfejs wywołania zwrotnego, obsługuje zdarzenia i interakcje użytkownika z obiektemGoogleMap
.
Obiekt GoogleMap
automatycznie wykonuje te operacje:
- Łączę z usługą Mapy Google.
- Pobieram fragmenty mapy.
- Wyświetlam kafelki na ekranie urządzenia.
- Wyświetlanie różnych elementów sterujących, takich jak przesuwanie i powiększanie.
- Reagowanie na gesty przesuwania i powiększania przez przesuwanie mapy oraz powiększanie i pomniejszanie.
Aby użyć obiektu GoogleMap
w aplikacji, musisz użyć
SupportMapFragment
lub MapView
jako obiekt kontenera mapy oraz
a następnie pobierz obiekt GoogleMap
z kontenera. Klasy kontenera pochodzą z fragmentu lub widoku Androida, dzięki czemu zapewniają mapie zarządzanie cyklem życia i możliwości interfejsu użytkownika z podstawowych klas Androida.
Klasa SupportMapFragment
jest nowocześniejszym i bardziej powszechnym kontenerem dla obiektu GoogleMap
.
Wyświetl kod
Poniższy kod pochodzi z pełnej aktywności w języku Java użytej w tym temacie do statycznego dodawania fragmentu. Projekt na Androida został utworzony na podstawie pustego projektu a następnie zaktualizowany na podstawie przewodnika po konfiguracji projektu. Po wykonaniu czynności opisanych w tym temacie kod może się różnić w zależności od szablonu projektu.
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; 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; // Implement OnMapReadyCallback. public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout file as the content view. setContentView(R.layout.activity_main); // Get a handle to the fragment and register the callback. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Get a handle to the GoogleMap object and display marker. @Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); } }
Dodawanie mapy
Ta sekcja opisuje sposób dodawania mapy podstawowej przy użyciu fragmentu jako mapy container; możesz jednak użyć widoku. Na przykład zobacz RawMapViewDemoActivity w GitHubie.
Podstawowe kroki:
Aby pobrać pakiet SDK, uzyskaj klucz interfejsu API i dodaj wymagane platformy. wykonaj czynności opisane w tym artykule:
Dodaj obiekt
SupportMapFragment
do działania, które będzie obsługiwać mapę. Fragment możesz dodać statycznie lub dynamicznie.Zaimplementuj interfejs
OnMapReadyCallback
.Ustaw plik układu jako widok treści.
Jeśli fragment został dodany statycznie, uzyskaj dla niego uchwyt.
Zarejestruj wywołanie zwrotne.
Pobierz nick obiektu
GoogleMap
.
Dodaj obiekt SupportMapFragment
Obiekt SupportMapFragment
możesz dodać do aplikacji statycznie lub dynamicznie.
Najprostszym sposobem jest dodanie jej statycznie. Jeśli dodasz fragment dynamicznie,
można wykonać na nim dodatkowe działania, takie jak usunięcie
i zastępować ją w czasie działania.
Aby dodać fragment statycznie
W pliku układu działania, które ma obsługiwać mapę:
- Dodaj element
fragment
. - Dodaj deklarację nazwy
xmlns:map="http://schemas.android.com/apk/res-auto"
Dzięki temu można używać funkcji niestandardowych atrybutów XML zmaps
. - W elemencie
fragment
ustaw atrybutandroid:name
na wartośćcom.google.android.gms.maps.SupportMapFragment
- W elemencie
fragment
dodaj atrybutandroid:id
i ustaw go na mapa.id. identyfikator zasobu (@+id/map
).
Oto przykład całego pliku układu zawierającego element fragment
:
<?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"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Aby dodać fragment dynamicznie
W aktywności:
- Utwórz instancję
SupportMapFragment
. - Zrealizuj transakcję, która dodaje fragment do aktywności. Aby dowiedzieć się więcej, zobacz Fragmenty transakcji.
Na przykład:
Kotlin
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(R.id.my_container, mapFragment) .commit()
Java
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(R.id.my_container, mapFragment) .commit();
Wdróż interfejs OnMapReadyCallback
Zaktualizuj deklarację aktywności w ten sposób:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
Ustawianie widoku treści
W metodzie onCreate
aktywności wywołaj funkcję
setContentView
i ustaw plik układu jako widok treści.
Jeśli na przykład plik układu nazywa się main.xml
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Pobierz uchwyt dla fragmentu i zarejestruj wywołanie zwrotne
Aby uzyskać uchwyt fragmentu, wywołaj metodę
FragmentManager.findFragmentById
i prześlij ją. identyfikator zasobu fragmentu w pliku układu. Jeśli dodałeś fragment dynamicznie, pomiń ten krok, ponieważ nick został już pobrany.Wywołaj metodę
getMapAsync
, aby ustawić funkcję wywołania zwrotnego w fragmentach.
Jeśli np. dodasz fragment statycznie:
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
Java
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
Pobieranie nicka obiektu GoogleMap
Użyj metody wywołania zwrotnego onMapReady
, aby uzyskać uchwyt dla funkcji
GoogleMap
obiekt. Wywołanie zwrotne jest wywoływane, gdy mapa jest gotowa do odebrania
danych wejściowych użytkownika. Udostępnia instancję klasy GoogleMap
o wartości niezerowej, której możesz użyć do zaktualizowania mapy.
W tym przykładzie wywołanie zwrotne onMapReady
pobiera uchwyt do GoogleMap
a następnie znacznik zostanie dodany do mapy:
Kotlin
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) }
Java
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); }
Gdy skompilujesz i uruchomisz aplikację, pojawi się mapa ze znacznikiem na wyspie Null (zero stopni szerokości geograficznej i zero stopni długości geograficznej).
Wyświetl kod całego ćwiczenia:
Co dalej?
Po wykonaniu tych czynności możesz skonfigurować ustawienia mapy.