戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

MapFragment を動的に実装する

MapFragment / SupportMapFragment を動的に実装する方法。


MapFragment を使うには Google Play Services (rev.3 ~) のライブラリ・プロジェクトが必要です。
まだ作成されてない方は以下の記事を参考に作成してください。
Google Maps Android API v2 試してみた
Google Maps Android API v2 導入の仕方


以下のソースコードは『MapFragment を静的に実装する(レイアウトXML定義)』で設定できるものを対象としています。
※ この記事では SupportMapFragment を例として扱っていますが MapFragment も同じです。

【アクティビティクラス】
package jp.inujirushi.android.mapsv2;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMapOptions;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;

public class MainActivity extends FragmentActivity {

private static final String TAG_MAP_FRAGMENT = "MAP_FRAGMENT";

private SupportMapFragment mMapFragment;
private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// 登録したタグから MapFragment を取得する(デバイス回転などの再生成対策)
mMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentByTag(TAG_MAP_FRAGMENT);
if (mMapFragment == null) {
// GoogleMapのオプションを設定する
GoogleMapOptions options = new GoogleMapOptions();
options.useViewLifecycleInFragment(false);
options.zOrderOnTop(false);

// MapFragment を作成する(デフォルトの GoogleMapOption の場合は引数無し)
mMapFragment = SupportMapFragment.newInstance(options);
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, mMapFragment, TAG_MAP_FRAGMENT)
.commit();
}
}

@Override
protected void onResume() {
super.onResume();

if (mMap == null) {
// MapFragment から GoogleMap を取得する
mMap = mMapFragment.getMap();
if (mMap != null) {
// マップの種類を設定する
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

// カメラの位置を変える
mMap.moveCamera(CameraUpdateFactory
.newCameraPosition(new CameraPosition.Builder()
.bearing(30.0f)
.target(new LatLng(35.681382, 139.766084))
.zoom(20.0f)
.tilt(60)
.build()));

// UI の有効/無効設定を行う
UiSettings ui = mMap.getUiSettings();
ui.setCompassEnabled(true);
ui.setRotateGesturesEnabled(true);
ui.setScrollGesturesEnabled(true);
ui.setTiltGesturesEnabled(true);
ui.setZoomControlsEnabled(true);
ui.setZoomGesturesEnabled(true);
}
}
}
}
GoogleMapOptionsUiSettings はデフォルト値を設定しています。

【結果】
MapFragment_xml_layout.png

【ソースコード解説】
※ 一般的な Fragment に関するところ(getSupportFragmentManager()を使うところ)は割愛します。

SupportMapFragment の生成
SupportMapFragment#newInstance() からインスタンスの作成を行います。
ここでは GoogleMapの構成を担う GoogleMapOptions クラスを渡す SupportMapFragment#newInstance(GoogleMapOptions options) を使っています。

GoogleMapOptions クラス
GoogleMapOptions は名前のとおり GoogleMap のオプションクラスです。
SupportMapFragment のインスタンス生成時にのみ設定できます。
ユーザー操作の初期設定もここで行う。この記事では後述の UiSettings クラスで設定しています。

GoogleMapOptions#useViewLifecycleInFragment(boolean useViewLifecycleInFragment)
マップのライフサイクルをフラグメントのビューに渡すかの判定。
デフォルトは false が設定されており、フラグメント自体のライフサイクルに依存する。

GoogleMapOptions#zOrderOnTop(boolean zOrderOnTop)
マップの表示優先度を上げて前面に表示するかの判定。
デフォルトは false 。 true で前面に表示される。
※ ドキュメントが無いので詳細は不明。前面に表示したときズームコントロールとロケーションボタンが背面に移動されて表示されなくなるが、コンパスは表示された。

GoogleMap クラス
MapFragment に表示されているマップは GoogleMap クラスで、SupportMapFragment#getMap() から取得できます。
マップに対する設定(以降の設定)はこのクラスに対して行われます。

GoogleMap#setMapType(int type)
マップの表示種類。
"MAP_TYPE_NONE":無し、"MAP_TYPE_NORMAL":標準、"MAP_TYPE_SATELLITE":衛星写真、"MAP_TYPE_TERRAIN":地形図
XMLでは設定できなかった "MAP_TYPE_HYBRID":ハイブリッド(地名などが表示される衛星写真) が設定できます。

GoogleMap#moveCamera(CameraUpdate update)
カメラを移動します。

CameraUpdateFactory#newCameraPosition(CameraPosition cameraPosition)
カメラの位置を設定します。

--------------------------------------------------
CameraPosition.Builder#bearing(float bearing)
カメラの向き(東西南北)。
北から時計周りの角度を指定します。

CameraPosition.Builder#target(LatLng location)
地図の中心となる座標(緯度、経度)

CameraPosition.Builder#tilt(float tilt)
カメラの角度(傾き)。
地図を真上から見た位置を0として傾ける角度を指定します。

CameraPosition.Builder#zoom(float zoom)
カメラのズームレベル。
大きいほど拡大表示されます。
--------------------------------------------------

UiSettingsクラス
ユーザーによる操作(UI)の設定を行う UiSettings クラスは、GoogleMap#getUiSettings() から取得します。

UiSettings#setCompassEnabled(boolean enabled);
コンパスの有効/無効。

UiSettings#setRotateGesturesEnabled(boolean enabled);
ジェスチャーによる地図の回転の有効/無効。

UiSettings#setScrollGesturesEnabled(boolean enabled);
ジェスチャーによる地図のスクロールの有効/無効。

UiSettings#setTiltGesturesEnabled(boolean enabled);
ジェスチャーによる地図の傾きの有効/無効。

UiSettings#setZoomControlsEnabled(boolean enabled);
ズームコントロール(画面右下の+-ボタン)の有効/無効。

UiSettings#setZoomGesturesEnabled(boolean enabled);
ジェスチャーによる地図のズームイン、ズームアウトの有効/無効。


レイアウトXMLで定義できる設定は以上となります。
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。