このトピックでは、Maps SDK for Android を使用するようプロジェクトを設定した後で、Android アプリに基本の地図を追加する方法について説明します。地図を追加したら、地図のタイプと対象物を変更することができます。
概要
Maps SDK for Android には、地図のライフサイクル、機能、データの管理に使用できるクラスが複数あります。これらのクラスは、Android UI モデルに基づくユーザー インタラクションをサポートし、地図の初期状態の設定や、アプリの実行中にユーザーが行う操作入力への応答などを可能にします。
地図を処理するメイン インターフェースとクラス:
GoogleMap
- 地図の基本的な対象物とデータを管理するエントリ ポイント。アプリからGoogleMap
オブジェクトにアクセスするには、このオブジェクトをまずSupportMapFragment
またはMapView
オブジェクトから取得する必要があります。SupportMapFragment
-GoogleMap
オブジェクトのライフサイクルを管理するフラグメント。OnMapReadyCallback
-GoogleMap
オブジェクトのイベントとユーザー インタラクションを処理するコールバック インターフェース。
GoogleMap
オブジェクトは、以下の操作を自動的に行います。
- Google マップサービスに接続する。
- 地図タイルをダウンロードする。
- タイルをデバイスの画面に表示する。
- パンやズームといった各種コントロールを表示する。
- パン操作やズーム操作に対し、地図の移動やズームインまたはズームアウトで応答する。
アプリで GoogleMap
オブジェクトを使用するには、地図のコンテナ オブジェクトとして SupportMapFragment
または MapView
オブジェクトを使用し、そのコンテナから GoogleMap
オブジェクトを取得する必要があります。コンテナクラスは Android のフラグメントまたはビューから派生するため、Android の基本クラスが持つライフサイクル管理機能と UI 機能を地図に提供することができます。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")); } }
地図を追加するには
このセクションでは、基本の地図を追加する方法について説明します。ここでは、地図のコンテナとしてフラグメントを使用しますが、フラグメントの代わりにビューを使用することもできます。ビューを使用する例については、GitHub の RawMapViewDemoActivity をご覧ください。
基本的な手順は、以下のとおりです。
SDK の入手、API キーの取得、必要なフレームワークの追加は、次の手順に沿って行います。
地図を処理するアクティビティに
SupportMapFragment
オブジェクトを追加します。フラグメントは静的または動的に追加できます。OnMapReadyCallback
インターフェースを実装します。レイアウト ファイルをコンテンツ ビューとして設定します。
フラグメントを静的に追加した場合は、フラグメントに対するハンドルを取得します。
コールバックを登録します。
GoogleMap
オブジェクトに対するハンドルを取得します。
SupportMapFragment オブジェクトを追加する
SupportMapFragment
オブジェクトは、静的または動的にアプリに追加できます。簡単なのは、静的に追加する方法です。フラグメントを動的に追加すると、ランタイムにフラグメントに対して追加の操作(削除、置換など)を行うことができます。
静的にフラグメントを追加するには
地図を処理するアクティビティのレイアウト ファイルで以下の手順を行います。
fragment
要素を追加します。- 名前の宣言
xmlns:map="http://schemas.android.com/apk/res-auto"
を追加します。これにより、maps
のカスタム XML 属性を使用できるようになります。 fragment
要素で、android:name
属性をcom.google.android.gms.maps.SupportMapFragment
に設定します。fragment
要素で、android:id
属性を追加し、この属性を R.id.map リソース ID(@+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
インスタンスを作成します。- フラグメントをアクティビティに追加するトランザクションをコミットします。詳しくは、フラグメント トランザクションをご覧ください。
以下に例を示します。
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();
OnMapReadyCallback
インターフェースを実装する
アクティビティの宣言を次のように更新します。
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
コンテンツ ビューを設定する
アクティビティの onCreate
メソッドで、setContentView
メソッドを呼び出し、レイアウト ファイルをコンテンツ ビューとして設定します。
たとえば、レイアウト ファイルの名前が 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); }
フラグメントに対するハンドルを取得し、コールバックを登録する
フラグメントに対するハンドルを取得するには、
FragmentManager.findFragmentById
メソッドを呼び出して、レイアウト ファイルに含まれているフラグメントのリソース ID を渡します。フラグメントを動的に追加している場合は、ハンドルをすでに取得しているため、この手順を省略してください。getMapAsync
メソッドを呼び出して、フラグメントにコールバックを設定します。
フラグメントを静的に追加している場合は、以下の例のようになります。
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);
GoogleMap
オブジェクトに対するハンドルを取得する
GoogleMap
オブジェクトに対するハンドルを取得するには、onMapReady
コールバック メソッドを使用します。ユーザー入力を受け入れる地図の準備が整うと、コールバックがトリガーされます。これにより、null ではない GoogleMap
クラスのインスタンスが提供されます。地図を更新する際には、このインスタンスを使用します。
次の例では、onMapReady
コールバックによって GoogleMap
オブジェクトに対するハンドルを取得し、地図にマーカーを追加しています。
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")); }
アプリのビルドと実行が正常に完了すると、Null 島(緯度および経度が 0 度)の上にマーカーを配置した地図が表示されます。
アクティビティのコードの全文をご確認ください。
次のステップ
このトピックの手順を完了したら、地図を設定するに進みます。