sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

Google Maps Android API v2 その6 API Demos 前編

前回の続き

API Demos

ということで、SDKに付属のデモアプリを見て行くことにします。API Demosのプロジェクトのimportの仕方はここ

  • Google Play services SDKをインストール

    Google Play services SDKSDKマネージャーで追加し、ライブラリプロジェクトを追加

  • mapsデモプロジェクトをImport

    Play services SDKの中にmapsのデモアプリも含まれているので、それをImport

  • サポートライブラリを追加

    Package Explorerでプロジェクトを右クリックし、Android Tools -> Add Support Library で追加するのが簡単

  • API Keyの追加

    デバッグ用なら Key for browser apps (with referers) のAPI key、リリース用ならGoogle API consoleでリリース用の証明書のfingerprintとパッケージ名を;でつなげてAPI Keyを生成し、AndroidManifest.xmlにそれを設定する

      XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;com.example.mapdemo
    

デモリスト

アプリを起動すると、まずはListViewにデモ機能の一覧表示。

Manifestによれば、ランチャで実行されるのは.MainActivity。 ListActivityの派生クラスで、R.layout.mainをsetContentView。 項目は DemoDetailsというデモのタイトルと説明とClassを保持するオブジェクトがセットされたListAdapterで管理。

リストアイテムのタップで、該当のDemosオブジェクトにセットされている情報から、Intentで各デモのアクティビティを開始。

iOSのデモではBundleしているDemoオブジェクトを自動で探す処理が入っていたが、Android版はstatic finalでハードコーディング。明示的なIntentを行う際の参考になるかもしれない。

Basic Map

SupportMapFagmentを全画面で貼ったレイアウトファイルを使った、基本的な地図表示のデモ。

カメラの位置はLat=0, Lng=0で向きも標準(真北真下)で、0,0の座標に"Marker"というタイトルのマーカーを追加しただけ。ズームコントロールやコンパス表示、ジェスチャ等、デフォルトでtrueなものは使えるので、これだけでもちゃんとした地図表示が可能。

ポイント(コードの中で、私がいいなと思った所や大事な処理だと感じたところ)
  • setUpMapIfNeeded()でマップの初期化処理。 onCreate()とonResume()とから呼ばれる

Camera

プログラムでカメラ移動を行うデモ。

SupportMapFragmentと、上下左右のスクロールボタン、ズームイン/アウトボタン、カメラ移動時のアニメーションon/offトグルボタンとアニメーション停止ボタン、sydneyとbondiへのカメラ移動ボタンを定義したレイアウトを使用している。

ポイント
  • Mapで用意されているズームコントロールは使わず、ズーム用のButtonを自分で定義している
  • カメラ移動時のアニメーション処理を切り替えるためにchangeCamera()を定義して、トグルボタンの値のチェックとカメラ移動を一括で行っている

Evetns

マップのタップイベントとロングタップイベント、カメラの移動イベントを受け取り、画面上部のTextViewにその情報を表示するデモ。タップとロングタップはその座標を、カメラは座標や向き、Tilt、回転などの情報を表示する。

ポイント
  • イベントリスナーを取り除く処理がないが、デモだから省略された?

Layers

マップの種類、渋滞状況、自己位置のレイヤー表示のデモ。マップはNormal,Hybrid,Satellite,Terrainから選択、渋滞状況と自己位置はCheckBoxで指定。

ポイント
  • 渋滞情報やGPS測位を含む自己位置表示に関しても、プロパティをtrueにするだけのお手軽処理

Location Source Demo

マップ上のロングタップした場所で座標更新イベントを発生させて、自己位置の表示を変更させるデモ。

ポイント
  • LocationSourceによるlocation providerの置き換え

    GoogleMapオブジェクトは、my location layer用に組み込みのlocation providerを持っているが、これをLocationSourceを実装したオブジェクトで置き換えることが可能。このデモでは、ロングタップした場所を現在位置としてGoogleMapオブジェクトに通知する処理となっている

UI Settings

マップ組み込みのUI controlsによるズームやコンパスのon/off、ジェスチャによるズームのon/offのデモ。

ポイント

これといって特になし

Ground Overlays

マップ上に、GroundOverlayオブジェクトで画像を貼り付け、さらに、その透過率を変化させるデモ。

ポイント
  • GroundOverlayのanchorの処理と、SeekBarにセットした、OnSeekBarChangeListenerの onProgressChangedの透過率変更の処理

Markers

マップ上に様々な種類のマーカの配置と、Info windowを切り替えるデモ。

  • タップすると跳ねるマーカー
  • 12色の標準形マーカー
  • カスタムイメージのマーカー
  • 移動可能なマーカー
  • カスタムなInfo windowの内容
  • カスタムなInfo windowのwindow
ポイント
  • addMarkersToMap()の12色のマーカーを作るところ
  • onMarkerClick()の、Perthのマーカーをアニメーションさせるところ
  • Info windowの見た目を変えるためのCustomInfoWindowAdapterの内部処理。 InfoWIndowAdapterを実装して、WindowとContentsをカスタムなものにする

    ImageView.setImageResource()で0を渡すと、透明なイメージが使われる
    デフォルトでない時は、SpannableStringで、タイトルを赤、スニペットをマゼンタと青に変更している


下書き保存せずに書いていたたため、はてなブログのメンテナンスでこの記事の大半を書き直す羽目になっちゃいました。やる気を奮い起こしてなんとか追いついたけど…やっぱりこまめに保存しながら書かないと駄目ですね…。"下書き保存する"ボタンの横に、"下書き保存&編集継続"ボタンが欲しいな…

ちょっと気力が萎えて来たので、一旦きります。