とりあえず最初に以下のように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 件のコメント:
コメントを投稿