マップ操作のイベント処理

マップ操作のイベント処理

まずは構文

void setOnMapClickListener(GoogleMap.OnMapClickLister listener)
マップ上のクリックを検知するリスナーを設定

void setOnMapLongClickListener(GoogleMap.OnMapLongClickListener listener)
マップ上の長押しを見地するリスナーを設定

void setOnCameraChangeListener(GoogleMap.OnCameraChangeListener listener)
マップ上でのカメラの返歌を検知するリスナーを設定

oid setOnInfoWindowClickListener(GoogleMap.OnInfoWindowClickListenr lister)
ピン上の情報がクリックされたことを検知するリスナーを設定
これは他のAPIとの組み合わせに使えそう

void onMapClick(LatLng point)
マップ上でクリックされたときに呼び出される

void onMapLongClick(LatLng point)
マップ上で長押しされたときに呼び出される

void onCameraChange(CameraPosition position)
マップ上でカメラが変更されたとき呼び出される

onInfoWindowClick(Marker marker)
ピン上の情報がクリックされたときのイベント処理

次に引数のメモ
listener
各イベントを検知するためのリスナー

point
マップ上で操作を行った位置情報

marker
クリックされたMarker インスタンス

マップ上のイベントは各リスナーを登録することで検知可能になる

では実践

クリック時
長押し時
マップを移動したとき
それぞれの状態のときに
Toast で座標を表示する

変更するのは MainActivity のみ

まずはクリックから

		//click event処理
		map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
			
			@Override
			public void onMapClick(LatLng point) {
				// TODO Auto-generated method stub
				
			}
		});

の中に処理を書いていく

Ubuntu の場合 Eclipse で Alt + / で
コードの補完が使えるため
すべて打ち込まなくても簡単に記述できる

中の処理は

Toast.makeText(getApplicationContext(), "クリックされた座標は "+point.latitude+", "+point.longitude, Toast.LENGTH_SHORT).show();

としてトーストで座標を表示する

		//click event処理
		map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
			
			@Override
			public void onMapClick(LatLng point) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(), "クリックされた座標は "+point.latitude+", "+point.longitude, Toast.LENGTH_SHORT).show();
			}
		});

次に長押しイベント
これもコード補完をつかって

		//長押しイベント
		map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
			
			@Override
			public void onMapLongClick(LatLng point) {
				// TODO Auto-generated method stub
				//長押しで行う処理
			}
		});

として処理内容を追加するだけ

今回もトーストで表示なので

Toast.makeText(getApplicationContext(), "長押しされた座標は "+point.latitude+", "+point.longitude, Toast.LENGTH_SHORT).show();

全体としては

		//長押しイベント
		map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
			
			@Override
			public void onMapLongClick(LatLng point) {
				// TODO Auto-generated method stub
				Toast.makeText(getApplicationContext(), "長押しされた座標は "+point.latitude+", "+point.longitude, Toast.LENGTH_SHORT).show();
			}
		});

そしてカメラの状態変化イベント処理
つまりマップを移動の処理

		//カメラ状態変化処理
		map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
			
			@Override
			public void onCameraChange(CameraPosition position) {
				// TODO Auto-generated method stub
				//カメラの状態変化のときの処理
			}
		});

これも座標をtoast で表示

LatLng point = position.target;
				Toast.makeText(getApplicationContext(), "カメラの状態が変化した座標は"+point.latitude+", "+point.longitude, Toast.LENGTH_SHORT).show();

一度座標を変数に格納してから使っている

全体としては


		//カメラ状態変化処理
		map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
			
			@Override
			public void onCameraChange(CameraPosition position) {
				// TODO Auto-generated method stub
				LatLng point = position.target;
				Toast.makeText(getApplicationContext(), "カメラの状態が変化した座標は"+point.latitude+", "+point.longitude, Toast.LENGTH_SHORT).show();
			}
		});

このように
それぞれの動作の中に処理を書けばいろいろな動作をマップでさせることができる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です