Androidアプリケーションでの地図描画と方位センサー実装
この連載では、Androidの開発の楽しさを感じてもらう事を目標に、難しい内容はひとまず置いておいて、アプリケーション開発ができるようになるま でを最短ルートで説明していきます。
前回までの作業で、「一覧」「参照」「登録」画面の実装がひとまず完了したので、今回は残すマップ画面の実装に入りましょう。
対象読者
本連載はJavaおよびEclipseの基本を理解している方を対象としています。
前回までの記事
- 第1回 Androidの概要と開発環境の構築
- 第2回 最低限これだけ知っていればOK! Androidアプリ開発の基礎知識
- 第3回 レイアウトの作成手順をマスターする!
- 第4回 Androidアプリでのデータベース基礎
- 第5回 アクティビティ実装時の勘どころ
作成中のサンプルアプリケーション
本連載では、いろいろな技術要素に触れるために、次のような「名刺管理アプリケーション」を作っています。
サンプルアプリケーションの機能概要
- 名刺情報を一覧表示
- 名刺情報の登録、更新
- 名刺の登録情報から地図を表示
- 名刺の登録情報から電話やメールなどの外部アプリケーションを利用
今回実装するマップ画面の機能
マップ画面では、下記の機能を実現します。
- 地図・衛星写真の切り替え
- 目的地の表示
- 現在地の表示(場所・向き)
地図・衛星写真の切り替え
地図・衛星写真の切り替えはMapViewのsetSatellite()で行います。ラジオボタンにOnCheckedChangeListenerを追加し、選択状態の変化に合わせて切り替えを行うように実装します。
package sample.bizcard;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.ToggleButton;
import android.widget.RadioGroup.OnCheckedChangeListener;
import com.google.android.maps.MapView;
/**
* 地図表示アクティビティ
* MapViewを扱うアクティビティはcom.google.android.maps.MapActivityを継承する必要がある
*/
public class MapActivity extends com.google.android.maps.MapActivity implements OnCheckedChangeListener{
// UI部品
private MapView map = null;
private RadioGroup radioGroup = null;
private RadioButton normalMapRadio = null;
private ToggleButton currentLocationToggle = null;
// Mapのコントローラ
private MapController controller = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 自動生成されたR.javaの定数を指定してXMLからレイアウトを生成
setContentView(R.layout.map);
// UI部品の取得
map = (MapView) findViewById(R.id.map);
normalMapRadio = (RadioButton)findViewById(R.id.normalMapRadio);
// デフォルトでマップ選択
normalMapRadio.setChecked( true);
radioGroup = (RadioGroup)findViewById( R.id.mapRadioGroup);
// 衛星選択時のリスナ
radioGroup.setOnCheckedChangeListener( this);
currentLocationToggle = (ToggleButton)findViewById( R.id.currentLocationToggle);
// コントローラの取得
controller = map.getController();
// ZoomControlの利用
map.setBuiltInZoomControls( true);
// 衛星写真OFF
map.setSatellite( false);
map.setClickable(true);
map.setEnabled(true);
}
/**
* ラジオボタンの選択変更時にマップを切り替える
*/
public void onCheckedChanged(RadioGroup group, int checkedId) {
if( checkedId == R.id.normalMapRadio){
// 衛星写真OFF
map.setSatellite( false);
}
else if( checkedId == R.id.satelliteMapRadio){
// 衛星写真ON
map.setSatellite( true);
}
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}


