以上で完了です。

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

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

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

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

情報ウィンドウ

情報ウィンドウは、マップ上にポップアップ ウィンドウでテキストまたは画像を表示します。 情報ウィンドウは常にマーカーに固定されています。 マーカーがタップされたときに表示されるのがデフォルトの動作です。

コードサンプル

GitHub の ApiDemos レポジトリには、すべての情報ウィンドウ機能を示すサンプルが含まれています。

  • MarkerDemoActivity: 情報ウィンドウのカスタマイズと情報ウィンドウ リスナーの使用

はじめに

情報ウィンドウを使用して、ユーザーがマーカーをタップしたときに情報を表示できます。 一度に表示される情報ウィンドウは 1 つのみです。 ユーザーがマーカーをクリックすると、表示中の情報ウィンドウが閉じて、新しい情報ウィンドウが表示されます。

現在情報ウィンドウが表示されているマーカーをクリックすると、その情報ウィンドウが閉じて、再度開きます。

情報ウィンドウは、端末の画面に平行になるように描画され、関連付けられているマーカーの上に中央揃えで示されます。 デフォルトの情報ウィンドウでは、タイトルが太字で表示され、タイトルの下にスニペット テキスト(任意)が表示されます。

情報ウィンドウを追加する

情報ウィンドウを追加する最も簡単な方法は、対応するマーカーの title() メソッドと snippet() メソッドを設定することです。 これらのプロパティを設定すると、そのマーカーがクリックされるたびに、情報ウィンドウが表示されるようになります。

static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
Marker melbourne = mMap.addMarker(new MarkerOptions()
                          .position(MELBOURNE)
                          .title("Melbourne")
                          .snippet("Population: 4,137,400"));

情報ウィンドウを表示または非表示にする

情報ウィンドウは、ユーザー タップ イベントに応答するように設計されています。 必要に応じて、ターゲット マーカーで showInfoWindow() を呼び出すことで、情報ウィンドウをプログラムで表示できます。

hideInfoWindow() を呼び出すと、情報ウィンドウを非表示にできます。

static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
Marker melbourne = mMap.addMarker(new MarkerOptions()
                          .position(MELBOURNE)
                          .title("Melbourne"));
melbourne.showInfoWindow();

カスタム情報ウィンドウ

情報ウィンドウのコンテンツとデザインをカスタマイズすることもできます。 これを行うには、InfoWindowAdapter インターフェースの具体的な実装を作成し、その実装を使用して GoogleMap.setInfoWindowAdapter() を呼び出す必要があります。

インターフェースには、実装する getInfoWindow(Marker)getInfoContents(Marker) の 2 つのメソッドが含まれています。 API は最初に getInfoWindow(Marker) を呼び出し、null が返された場合は getInfoContents(Marker) を呼び出します。

これも null を返した場合は、デフォルトの情報ウィンドウが使用されます。

この最初のメソッド(getInfoWindow())は、情報ウィンドウ全体で使用されるビューを指定できるようにします。 2 つ目のメソッド(getInfoContents())は、ウィンドウのコンテンツのカスタマイズのみを行えるようにしますが、デフォルトの情報ウィンドウのフレームと背景は保持します。

注: 描画される情報ウィンドウは、ライブビューではありません。 ビューは、それが返されるときに(View.draw(Canvas) を使用して)画像としてレンダリングされます。

つまり、後からビューに加えた変更は、マップ上の情報ウィンドウには反映されないということです。 後から情報ウィンドウをアップデートするには(たとえば、画像がロードされた後で)、showInfoWindow() を呼び出します。 さらに、情報ウィンドウは、タップイベントや操作イベントといった、通常のビューで一般的に行われる相互作用に応答しません。

ただし、以下のセクションで説明するように、情報ウィンドウ全体に対する一般的なクリック イベントをリッスンすることはできます。

次の図は、デフォルトの情報ウィンドウ、コンテンツがカスタマイズされている情報ウィンドウ、フレームと背景がカスタマイズされている情報ウィンドウを示しています。

情報ウィンドウの比較

情報ウィンドウ イベント

MarkerDemoActivity のサンプル には、情報ウィンドウ イベントの登録および処理を行うサンプルコードが含まれています。

OnInfoWindowClickListener を使用して、情報ウィンドウに対するクリック イベントをリッスンできます。 マップにこのリスナーを設定するには、GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener) を呼び出します。 ユーザーが情報ウィンドウをクリックすると、onInfoWindowClick(Marker) が呼び出され、情報ウィンドウが既定のハイライト色(グレー)でハイライト表示されます。

public class MarkerDemoActivity extends AppCompatActivity implements
        OnInfoWindowClickListener,
        OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    public void onMapReady(GoogleMap map) {
        mMap = map;
        // Add markers to the map and do other map setup.
        ...
        // Set a listener for info window events.
        mMap.setOnInfoWindowClickListener(this);
    }

    @Override
    public void onInfoWindowClick(Marker marker) {
        Toast.makeText(this, "Info window clicked",
                Toast.LENGTH_SHORT).show();
    }
}

同様に、OnInfoWindowLongClickListener を使用して、長押しクリック イベントをリッスンすることもできます。このリスナーを設定するには、GoogleMap.setOnInfoWindowLongClickListener(OnInfoWindowLongClickListener) を呼び出します。

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

情報ウィンドウを閉じたときに通知を受け取るには、OnInfoWindowCloseListener を使用します。このリスナーは、GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener) を呼び出して設定します。

これで、onInfoWindowClose(Marker) コールバックを受け取るようになります。

情報ウィンドウの更新に関する注意 すでに情報ウィンドウを開いているマーカーをユーザーがタップして情報ウィンドウを更新する場合は、onInfoWindowClose() イベントが発行されます。

しかし、開いている情報ウィンドウの Marker.showInfoWindow() をプログラムで呼び出した場合は、onInfoWindowClose() イベントは発行されません。 後者の動作は、情報ウィンドウが閉じられて再度開くことを把握しているという前提に基づいています。

情報ウィンドウに関する前のセクションで説明したように、情報ウィンドウはライブ View ではありません。 ビューはマップ上に画像としてレンダリングされます。 そのため、ビューに設定したすべてのリスナーは無視され、ビューのさまざまな部分に対するクリック イベントを区別することはできません。

カスタム情報ウィンドウ内には、ボタン、チェックボックス、テキスト入力といったインタラクティブなコンポーネントを配置しないようにしてください。

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

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