2010年12月21日火曜日

Android アプリでGoogle Maps のズームイン/アウト時に何らかのイベントを処理したい場合はOnZoomListener を実装する

Androidアプリで、Google Mapsのズームイン/ズームアウト時に何らかのイベントを処理したい場合は、OnZoomListener を実装する。

import android.os.Bundle;
import android.util.Log;
import android.widget.ZoomButtonsController.OnZoomListener;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

public class MapDemoActivity extends MapActivity implements OnZoomListener {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  createMapView();
 }

 private void createMapView() {
  mapView = (MapView) findViewById(R.id.mapview);
  // デフォルトのズームコントローラーを使用する
  mapView.setBuiltInZoomControls(true);
  // ズームコントローラーのイベントを処理するリスナーを設定する
  mapView.getZoomButtonsController().setOnZoomListener(this);
 }

 @Override
 public void onZoom(boolean zoomIn) {
  if (zoomIn ? mapView.getController().zoomIn() : mapView.getController()
    .zoomOut());
  Log.i(LOGTAG, "onZoom():zoomIn=" + zoomIn);

  // タスクを実行する
  executeTask();
 }

 @Override
 public void onVisibilityChanged(boolean visible) {
 }

onZoomListener を実装すると、必ず、onZoom() とonVisibilityChanged() をオーバーライドしなければならない。

onZoom() は、正に、ズームイン/ズームアウト時に呼ばれるメソッドであり、onVisibilityChanged() は、デフォルトのズームコントローラーの表示/非表示が切り替わったときに呼ばれるメソッド。特に行いたい処理が無くても、これら2つのメソッドは記述する必要がある。


注意点としては、onZoom() の処理をオーバーライドするので、自分でzoomIn() やzoomOut() を呼ばなくてはいけなくなること。zoomIn()/zoomOut() をコールしないと、マップがズームイン/ズームアウトしなくなる。