В этом разделе описывается, как добавить базовую карту в приложение для Android после того, как вы настроили проект для использования Maps SDK для Android. После добавления карты вы можете изменить ее тип и функции .
Обзор
Maps SDK для Android предоставляет несколько классов, которые ваше приложение может использовать для управления жизненным циклом, функциями и данными карты. Классы поддерживают взаимодействие с пользователем на основе модели пользовательского интерфейса Android, например установку начального состояния карты и реагирование на жесты, вводимые пользователем во время выполнения.
Основной интерфейс и классы для работы с картами:
GoogleMap
— точка входа для управления базовыми функциями и данными карты. Ваше приложение может получить доступ к объектуGoogleMap
только после того, как он будет получен из объектаSupportMapFragment
илиMapView
.SupportMapFragment
— Фрагмент для управления жизненным циклом объектаGoogleMap
.MapView
— представление для управления жизненным циклом объектаGoogleMap
.OnMapReadyCallback
— интерфейс обратного вызова, который обрабатывает события и взаимодействие с пользователем для объектаGoogleMap
.
Объект GoogleMap
автоматически выполняет следующие операции:
- Подключение к сервису Google Maps.
- Загрузка фрагментов карты.
- Отображение плиток на экране устройства.
- Отображение различных элементов управления, таких как панорамирование и масштабирование.
- Реагирование на жесты панорамирования и масштабирования перемещением карты и увеличением или уменьшением масштаба.
Чтобы использовать объект GoogleMap
в своем приложении, вы должны использовать объект SupportMapFragment
или MapView
в качестве объекта-контейнера для карты, а затем извлечь объект GoogleMap
из контейнера. Поскольку классы-контейнеры являются производными от фрагмента или представления Android, они предоставляют карте возможности управления жизненным циклом и пользовательского интерфейса своих базовых классов Android. Класс SupportMapFragment
— это более современный и распространенный контейнер для объекта GoogleMap
.
Посмотреть код
Следующий код взят из полного действия Java, используемого в этом разделе при статическом добавлении фрагмента. Проект Android был создан на основе шаблона проекта Empty, а затем обновлен на основе руководства по настройке проекта . После выполнения действий, описанных в этом разделе, ваш код может отличаться в зависимости от шаблона проекта.
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")); } }
Чтобы добавить карту
В этом разделе описывается, как добавить базовую карту, используя фрагмент в качестве контейнера карты; однако вместо этого вы можете использовать представление. Пример см. в разделе RawMapViewDemoActivity на Github.
Основные шаги:
Чтобы получить SDK, получить ключ API и добавить необходимые платформы, выполните действия, описанные в разделе:
Добавьте объект
SupportMapFragment
в действие, которое будет обрабатывать карту. Вы можете добавлять фрагмент статически или динамически.OnMapReadyCallback
интерфейс OnMapReadyCallback.Установите файл макета в качестве представления содержимого.
Если вы добавили фрагмент статически, получите дескриптор фрагмента.
Зарегистрируйте обратный звонок.
Получите дескриптор объекта
GoogleMap
.
Добавьте объект SupportMapFragment.
Вы можете добавить объект SupportMapFragment
в свое приложение статически или динамически. Самый простой способ — добавить его статически. Если вы добавляете фрагмент динамически, вы можете выполнять над ним дополнительные действия, например удалять и заменять его во время выполнения.
Статическое добавление фрагмента
В файле макета действия, которое будет обрабатывать карту:
- Добавьте элемент
fragment
. - Добавьте объявление имени
xmlns:map="http://schemas.android.com/apk/res-auto"
. Это позволяет использовать пользовательские XML-атрибутыmaps
. - В элементе
fragment
задайте для атрибутаandroid:name
значениеcom.google.android.gms.maps.SupportMapFragment
. - В элементе
fragment
добавьте атрибутandroid:id
и установите для него идентификатор ресурса R.id.map (@+id/map
).
Например, вот полный файл макета, который включает элемент 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"/>
Динамическое добавление фрагмента
В деятельности:
- Создайте экземпляр
SupportMapFragment
. - Зафиксируйте транзакцию, которая добавит фрагмент в активность. Дополнительные сведения см. в разделе Транзакции фрагментов .
Например:
Джава
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(R.id.my_container, mapFragment) .commit();
Котлин
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(R.id.my_container, mapFragment) .commit()
Реализовать интерфейс OnMapReadyCallback
Обновите объявление активности следующим образом:
Джава
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
Котлин
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
Установите представление содержимого
В методе onCreate
вашей активности вызовите метод setContentView
и установите файл макета в качестве представления содержимого.
Например, если файл макета называется main.xml
:
Джава
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Котлин
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
Получите дескриптор фрагмента и зарегистрируйте обратный вызов
Чтобы получить дескриптор фрагмента, вызовите метод
FragmentManager.findFragmentById
и передайте ему идентификатор ресурса фрагмента в файле макета. Если вы добавили фрагмент динамически , пропустите этот шаг, потому что вы уже получили дескриптор.Вызовите метод
getMapAsync
, чтобы установить обратный вызов для фрагмента.
Например, если вы добавили фрагмент статически:
Джава
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
Котлин
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
Получить дескриптор объекта GoogleMap
Используйте метод обратного вызова onMapReady
, чтобы получить дескриптор объекта GoogleMap
. Обратный вызов запускается, когда карта готова принять пользовательский ввод. Он предоставляет ненулевой экземпляр класса GoogleMap
, который можно использовать для обновления карты.
В этом примере обратный вызов onMapReady
извлекает дескриптор объекта GoogleMap
, а затем на карту добавляется маркер :
Джава
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); }
Котлин
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) }
Когда вы успешно создадите и запустите приложение, оно отобразит карту с маркером на Нулевом острове (ноль градусов широты и ноль градусов долготы).
Просмотрите код для полного действия:
Посмотреть завершенное действие
Что дальше
После выполнения этих шагов вы можете настроить параметры карты .