今回もosmdroidの話題。
osmdroidには、osmbonuspackというライブラリを拡張してカスタマイズできる機能が備わっており
これを上手い具合に使ってInfoWindowをカスタマイズすることができます。
customizeしたinfoWindowは、マーカーをクリックすることで表示させることができます。
ここまではなんてことないのですが、このinfoWindowがどこをタップしても
消えない問題が発生し、少し往生してしまいました。
osmdroidのチュートリアルを見直したところ、MapEventsOverlayを拡張してマーカー以外のマップを
タップすることでこの問題を解決することができるみたい。というかチュートリアルを
飛ばしていた疑惑が発生。
てな訳で早速実装。以下のように書くことができます。
</pre> MapEventsOverlay events = new MapEventsOverlay(new MapEventsReceiver() { @Override public boolean singleTapConfirmedHelper(GeoPoint p) { InfoWindow.closeAllInfoWindowsOn(mapView); return true; // edited version } @Override public boolean longPressHelper(GeoPoint p) { return false; } }); <pre>
singleTapConfirmedHelperが、マップを一回タップした時、
longPressHelperがマップを長押しした時に呼ばれます。
基本的には上のsingleTapConfirmedHelperしか使わないです。
同メソッド内に以下のように記述します。
InfoWindow.closeAllInfoWindowsOn(mapView);
このように一行追加するだけで今回のInfoWindowが消えない
問題を解決することができました。
osmdroidでカスタマイズしたinfoWindowを使う際は覚えておきましょう。