2011年3月31日木曜日

Android MapViewでクリックイベント取得

MapViewをクリックした時に、その場所のジオコードを取得し、そのジオコードを元にいろんなAPIをたたきたい、ということでやってみたが、結構はまったのでいかに記載。

とりあえず最初に以下のようにMapViewのOnClickListenerのEventを取得するようにした。


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

  MapView mapView = (MapView)findViewById(R.id.mapView);
                mapView.setBuiltInZoomControls(true);
                mapView.setOnTouchListener(new OnTouchListener() {
   public boolean onTouch(View v, MotionEvent event) {
    GeoPoint point = mapView.getMapCenter(); // TODO 自動生成されたメソッド・スタブ
    lati = point.getLatitudeE6() / 1E6;
    lon = point.getLongitudeE6() / 1E6;


    // ここでAPIよびだし!!

    mMapController.animateTo(point);
    Log.d(TAG, "click lati=" + lati + " lon=" + lon);
    return false;
   }
  });
しかししかーし、OnTouchイベントは1回しかこない!
ちなみにOnTouchをTrueにしてリターンすると、それ以降の処理を受け付けれなくなった。
また、OnClickListenerでもいけるかな!?と思ったけどEventすら受け付けなかった。

ちなみに画面をタップした時にその場所にアイコンを表示するために、Overlayクラスを実装していた。
うーむ、とあれこれbreakを張って見ているとどうもOverlayクラスにはEventが来ていた。

おおー、じゃこっちでとればいいじゃん、ということでOverlayで取得するように変更!
以下ソース。

public class IconOverlay extends Overlay {
 Bitmap mIcon;
 int mOffsetX;
 int mOffsetY;

 GeoPoint mPoint;

 IconOverlay(Bitmap icon, GeoPoint point){
  mIcon = icon;
  mOffsetX = 0 - icon.getWidth() / 2;
  mOffsetY = 0 - icon.getHeight() / 2;
  mPoint = point;

 }


 @Override
    public boolean onTap(GeoPoint geopoint, MapView mapview) {
     mPoint = geopoint;
        // ここでAPIをよびだし!!!
     return super.onTap(geopoint, mapview);
    }

 @Override
    public void draw(Canvas canvas, MapView mapview, boolean shadow) {
  super.draw(canvas, mapview, shadow);

  if (!shadow){
   Projection projection = mapview.getProjection();
   Point point = new Point();
   projection.toPixels(mPoint, point);
   point.offset(mOffsetX, mOffsetY);

   canvas.drawBitmap(mIcon, point.x, point.y, null);
  }
 }

}

0 件のコメント:

【スマート農業】 いまさらだけど、いまだからこその農業IoT 

久々投稿 転職してはや2年半。バタバタしてる中で、あーっという間に時間は過ぎてきた。 仕事はそれなりに順調だけど、ただやっぱり自分で何かを起こす!ということはではできていなく、、、年齢45をこえ、、、、、とくに昔からずーとやろうやろうと言って実現できてなかっった農業IoT。。 去...