Google Maps Android API v2 その7 API Demos 後編
残りのデモを見て行きます。
Polygons
マップに二種類のPolygonオブジェクトを追加するデモ。ひとつは、二カ所の穴の空いた正方形、もう一つは、縁の線の太さと、塗りつぶしの色と透過率を変更可能な楕円。
ポイント
- setUpMap()の中でPolygonを生成。穴の部分はaddHole()で追加。四角いPolygonを作るのに、craeteRectangle()というメソッドを定義。
- 楕円は400個の点群で定義されている。
Polylines
マップに三種類のPolylineオブジェクトを追加するデモ。ひとつはメルボルン-アデレード-パースを結ぶ線群、もうひとつはLHR-AKL-LAX-JFK-LHR(世界各地の空港)を結んだgeodesicな線群、最後はシドニーを中心とした線の太さと色と透過率を変更可能な楕円。
- setUpMap()でPolylineを生成。
- 楕円は100個の点群で定義されている。
Circles
マップ上にマーカーとCircleオブジェクトを追加するデモ。 中心と縁の2箇所のマーカーと共に生成されるCircleは、線の太さと塗りつぶしの色と透過率が変更可能。 中心のマーカーを移動させると、Circleも共に移動し、縁のマーカーを移動させると、Circleの大きさが変わる。
また、マップ上でロングタップすると、新しいCircleが追加される。
class DraggableCircleで移動可能なCircleを定義
2つのMarkerと1つのCircleオブジェクトをメンバとして持ち、onMarkerMoved()とonStyleChang()というイベントハンドラもどきのメソッドが定義されている。前者はOnMarkerDragListenerのonMarkerMoved()から、後者はOnSeekBarChangeListenerのonProgressChanged()から呼び出される。
Tile Overlays
マップのタイルを地球ではなく月面のものに置き換えるデモ。Googleが用意している月面画像のサーバー(lunarmaps)からタイルを取得している。
ポイント
GoogleMap#setMapType()に GoogleMap.MAP_TYPE_NONEを設定し、TileProviderを実装したオブジェクトをaddTileOverlayでセットする
GoogleMapオブジェクトが必要とするタイルは、TileProvider#getTile(x,y,zoom)で返してやればよい。
Lat=0,Lng=0を基準とし、経度は-180(W) 〜 180(E)、緯度は85.0511(N)から-85.0511(S)のメルカトル投影法。Zoom level 0が世界全体の地図で、level 1 が 縦横2枚、level Nで 縦横 2Nとなるようにタイルを作ればよい
Options
XMLによる初期オプション設定のデモ
ポイント
- options_demo.xmlにずらっと並んだattribute
Multiple Maps
一つの画面内に4つの異なるマップを表示するデモ。MapFragmentなので簡単に複数のマップ表示が可能。
ポイント
- multimap_demo.xmlの指定だけで複数表示に対応している
Retain map
MapFragmentのライフサイクルをActivityと別にして、同じGoogleMapオブジェクトを利用するためのデモ。
ポイント
- onCreateの MapFragment#setRetainInstance()の処理
Raw MapView
MapFragmentではなく、MapViewを使用してマップ表示を行うデモ。
ポイント
- raw_mapview_demo.xmlの書き方
- Activityのライフサイクルイベント(onCreateやonResume等)をMapViewに伝えるところ
Programmatically add map
レイアウトファイルを使わず、プログラムでMapFragmentを生成し、マップを表示するデモ。
ポイント
特になし。Fragmentを動的に作る処理そのもの。
ひととおりデモのソースを眺めてみました。iOS版と一緒なんですが、こっちの方が Fragmentで操作できるのと、xmlで初期設定が可能な分、扱いやすいような気がちょっとだけします。 最低限の知識は頭に入ったので、ここからは実際にアプリに組込みながら、追加調査をしていくことにします。
というわけで、Google Maps Android API v2の紹介はひとまず終了。おつかれさまでしたー