要件定義の不安をなくす。要件定義の不安をなくす。ユニファのバックエンド分割に学ぶイノベーションメタバース開発に必要な技術の基本知識をおさらい。Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。APIを活用すれば、楽しいアプリをかんたんに作ることができます。APIの紹介と、そのAPIを利用したサンプルアプリの制作を通じて、Androidアプリの実践的な開発を解説します。前回は、地図の中心位置の最寄り駅を表示するところまでを解説しました。第7回の本稿では、地図を移動した場合やマーカーの吹き出し(情報ウィンドウ)をタップした場合のイベント処理と、MapFragmentのカスタマイズを解説します。最後に対象読者Androidアプリケーションの開発を始めたい方で、JavaとEclipseの基本的な知識がある方を対象とします。地図の移動やマーカーの吹き出しのタップを判断するには、そのイベントを監視する、イベントリスナーと呼ばれる処理を追加します。処理手順の1から4まではすでに解説しましたので、今回は、5と6の部分を解説します。APIにアクセスする結果を解析するマーカーを追加するマーカーと駅情報を保存する地図の位置を変更したときのイベントリスナーを追加するマーカー(吹き出し)をタップしたときのイベントリスナーを追加する次のようにActivityには、前回までのコードの修正と追加部分があります。~中略~}まず、前回のコードからの変更点を説明しておきましょう。MainActivityクラスに、地図の中心位置を保存するフィールドを追加しています(1)。地図の中心位置を取得する処理(2)を、execMoyoriメソッドから分離させました。APIのURLを準備してローダーを初期化する処理を、後述するイベントのコールバック処理のなかでも利用したいためです。次に、イベントリスナーの処理を説明します。地図の移動の追随は、地図の位置を変更した際に発生するイベントを利用します。このイベントの発生時に何らかの処理を行うには、setOnCameraChangeListenerメソッドを使ってイベントリスナーを登録します(4)。これで、地図の位置が変更された際に、指定したメソッドがコールバックされるようになります。setOnCameraChangeListenerメソッドの引数は、OnInfoWindowClickListenerインターフェースを実装したクラスです。このインターフェースには、地図の位置を変更した際にコールバックされるonCameraChangeというメソッドのみ定義されています。このようなイベントリスナーの場合、無名クラスを使って、OnInfoWindowClickListenerインターフェースを実装するようにすると、簡潔に記述できます(5)。吹き出しに対するイベントリスナーも、同様に追加します(6)。ここでは、OnInfoWindowClickListenerインターフェースを実装する無名クラスを利用しています。吹き出しをタップすると、onInfoWindowClickメソッドがコールバックされます。そのメソッドの引数のmarkerは、タップされたマーカーとなっていますので、HashMapのekiMarkerMapから、最寄り駅情報を取り出しています(7)。地図に追随してマーカーを表示する最後に、地図の位置を変更した際にコールバックされるonCameraChangeメソッド内の処理を追加します。APIを呼び出すようにしています。onCameraChangeメソッドの引数には、移動した最後の位置が格納されていますので、その位置と、保存しておいた位置(centerPosition)との2点間を比較しています。2点の緯度、経度から、距離を求めるには、地球の球体を考慮した計算が必要です(2)。計算式については、「2地点間の距離と方位角」というサイトを参考にしました。これで、地図を移動した場合に、追随してマーカーが表示されるようになります。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。