以上で完了です。

開発を始めるには、デベロッパー ドキュメント をご覧下さい。

Google Maps Android API をアクティベートする

まず初めに Google Developers Console で次の作業を行います。

  1. プロジェクトを作成または選択する
  2. Google Maps Android API をアクティベートする
  3. 適切なキーを作成する
続ける

イベント

Google Maps Android API を使用して、マップ上のイベントをリッスンできます。

コードサンプル

GitHub の ApiDemos レポジトリには、イベントとリスナーの機能を示すサンプルが含まれています。

マップのクリック / 長押しクリック イベント

ユーザーがマップ上のポイントをタップしたときに応答するには、 OnMapClickListener を使用します。これは、GoogleMap.setOnMapClickListener(OnMapClickListener) を呼び出すことでマップに設定できます。 ユーザーがマップ上のどこかをクリック(タップ)すると、ユーザーがクリックしたマップの位置を示す onMapClick(LatLng) イベントを受け取ります。

該当する画面の位置(ピクセル単位)が必要な場合は、マップから Projection を取得できます。これを使用して、経度と緯度の座標と画面のピクセル座標を相互に変換できます。

OnMapLongClickListener を使用して、長押しクリック イベントをリッスンすることもできます。これは、GoogleMap.setOnMapLongClickListener(OnMapLongClickListener) を呼び出すことでマップに設定できます。

このリスナーはクリック リスナーと同様に動作し、長押しクリック イベントが発生すると、onMapLongClick(LatLng) コールバックによって通知を受け取ります。

ライトモードでのクリック イベントの無効化

ライトモードのマップでクリック イベントを無効にするには、MapView または MapFragment を含むビューで setClickable() を呼び出します。 これは、リストビューで 1 つ以上のマップを表示している場合などに、クリック イベントによってマップに関係のないアクションを呼び出す必要があるときに役立ちます。

クリック イベントを無効にするオプションは、ライトモードでのみ使用できます。 クリック イベントを無効にすると、マーカーもクリックできなくなります。 マップ上の他のコントロールには影響しません。

MapView の場合:

MapView view;
...
view.setClickable(false);

MapFragment の場合:

MapFragment fragment;
...
fragment.getView().setClickable(false);

カメラ変更イベント

マップビューは、平面を見下ろすカメラとしてモデル化されています。 マップのズームレベル、ビューポート、視点を変えるには、カメラのプロパティを変更します。

詳細は、カメラのガイドをご覧ください。 さらにカメラは、ユーザーによる操作の影響も受けます。

カメラ変更リスナーを使用すると、カメラの動きを追跡することができます。 アプリは、カメラの動きの開始イベント、進行中イベント、終了イベントの通知を受け取ることができます。 また、カメラが動いている理由を確認することも可能です。具体的には、ユーザー操作によってカメラが動いているのか、組み込みの API アニメーションなのか、またはデベロッパーによって制御された動作なのかを判別することができます。

次のサンプルは、カメラで利用可能なすべてのイベント リスナーを示しています。

public class MyCameraActivity extends FragmentActivity implements
        OnCameraMoveStartedListener,
        OnCameraMoveListener,
        OnCameraMoveCanceledListener,
        OnCameraIdleListener,
        OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_camera);

        SupportMapFragment mapFragment =
            (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        mMap = map;

        mMap.setOnCameraIdleListener(this);
        mMap.setOnCameraMoveStartedListener(this);
        mMap.setOnCameraMoveListener(this);
        mMap.setOnCameraMoveCanceledListener(this);

        // Show Sydney on the map.
        mMap.moveCamera(CameraUpdateFactory
                .newLatLngZoom(new LatLng(-33.87365, 151.20689), 10));
    }

    @Override
    public void onCameraMoveStarted(int reason) {

        if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
            Toast.makeText(this, "The user gestured on the map.",
                           Toast.LENGTH_SHORT).show();
        } else if (reason == OnCameraMoveStartedListener
                                .REASON_API_ANIMATION) {
            Toast.makeText(this, "The user tapped something on the map.",
                           Toast.LENGTH_SHORT).show();
        } else if (reason == OnCameraMoveStartedListener
                                .REASON_DEVELOPER_ANIMATION) {
            Toast.makeText(this, "The app moved the camera.",
                           Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onCameraMove() {
        Toast.makeText(this, "The camera is moving.",
                       Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCameraMoveCanceled() {
        Toast.makeText(this, "Camera movement canceled.",
                       Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCameraIdle() {
        Toast.makeText(this, "The camera has stopped moving.",
                       Toast.LENGTH_SHORT).show();
    }
}

使用可能なカメラ リスナーは次のとおりです。

  • OnCameraMoveStartedListeneronCameraMoveStarted() コールバックは、カメラが動き始めたときに呼び出されます。 このコールバック メソッドは、カメラの動きの reason を引数に取ります。 この理由は次のいずれかです。

    • REASON_GESTURE は、マップのパン、チルト、ピンチ操作によるズーム、回転など、マップ上でのユーザー操作に応答してカメラが動いたことを示します。

    • REASON_API_ANIMATION は、ズームボタンのタップ、現在地ボタンのタップ、マーカーのクリックなど、非ジェスチャー型のユーザー操作に応答して API がカメラを動かしたことを示します。

    • REASON_DEVELOPER_ANIMATION は、アプリによってカメラの動きが開始されたことを示します。

  • OnCameraMoveListeneronCameraMove() コールバックは、カメラが動いているとき、またはユーザーがタッチ スクリーンを操作しているときに複数回呼び出されます。 コールバックが呼び出される頻度の目安として、API はフレームごとにコールバックを一度呼び出すことを知っておくと便利です。 ただし、このコールバックは非同期的に呼び出されるため、画面の表示とは同期していないことに注意してください。

また、1 つの onCameraMove() コールバックと次のコールバック間でカメラ位置を変更しないようにすることも可能です。

  • OnCameraIdleListenerOnCameraIdle() コールバックは、カメラの動きが停止したとき、およびユーザーがマップの操作を停止したときに呼び出されます。

  • OnCameraMoveCanceledListenerOnCameraMoveCanceled() コールバックは、カメラの現在の動きが中断されたときに呼び出されます。 OnCameraMoveCanceled() コールバックの直後に、新しい reason によって onCameraMoveStarted() コールバックが呼び出されます。

    アプリで GoogleMap.stopAnimation() を明示的に呼び出した場合、OnCameraMoveCanceled() コールバックは呼び出されますが、onCameraMoveStarted() コールバックは呼び出されません。

マップにリスナーを設定するには、該当する set-listener メソッドを呼び出します。 たとえば、OnCameraMoveStartedListener からコールバックをリクエストするには、GoogleMap.setOnCameraMoveStartedListener() を呼び出します。

CameraPosition からカメラのターゲット(緯度と経度)、ズーム、方向、チルトを取得できます。 これらのプロパティの詳細については、カメラ位置のガイドをご覧ください。

商業施設やその他の有名スポット上でのイベント

有名スポット(POI)は対応するアイコンとともにベースマップにデフォルトで表示されます。 POI には、公園、学校、政府機関に加えて、店舗、レストラン、ホテルなどの商業 POI が含まれます。

POI に対するクリック イベントには応答することが可能です。 商業施設やその他の有名スポットのガイドをご覧ください。

インドアマップ イベント

イベントを使用して、インドアマップのアクティブなレベルを検出し、カスタマイズできます。 OnIndoorStateChangeListener インターフェースを使用して、新しい建物がフォーカスされたか、建物内で新しいレベルがアクティブになった場合に、リスナーを呼び出すように設定します。

GoogleMap.getFocusedBuilding() を呼び出して、現在フォーカスされている建物を取得します。

特定の経度と緯度にマップの中心を合わせると、通常はその経度と緯度にある建物が表示されますが、必ず表示されるとは限りません。

次に IndoorBuilding.getActiveLevelIndex() を呼び出して、現在アクティブなレベルを確認します。

IndoorBuilding building = mMap.getFocusedBuilding();
if (building == null) {
  return null;
}
return building.getLevels().get(building.getActiveLevelIndex());

これは、 マーカー地面オーバーレイタイル オーバーレイ、ポリゴン、ポリライン、およびその他の図形などのカスタム マークアップをアクティブなレベルに対して表示する場合に役立ちます。

ヒント:路上に戻るには、IndoorBuilding.getDefaultLevelIndex() を使用してデフォルト レベルを取得し、IndoorLevel.activate() を使用してそれをアクティブなレベルに設定します。

マーカーと情報ウィンドウ イベント

マーカー クリックやドラッグ イベントなどのマーカー イベントをリッスンして応答するには、対応するリスナーを、マーカーが属する GoogleMap オブジェクトに設定します。

マーカー イベントに関するガイドをご覧ください。

情報ウィンドウでイベントをリッスンすることもできます。

シェイプおよびオーバーレイ イベント

ポリラインポリゴン地面オーバーレイ上でのクリック イベントをリッスンして応答することができます。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。