フラグメントについて昨日のおさらいというか追記事項。
FragmentActivityは4.0以降は継承しなくてもいいらしい。Activityの継承だけでOKとのこと。
では今日はGoogleMapの使い方。
これは14年1月21日現在ってことでお願いします。
バージョン変更が目まぐるしいらしく、すぐに使い物にならなくなる可能性があるらしいので。
目次
GoogleMap
SDKツールを落とす
ウィンドウ > android SDKマネージャー > Extras > Google Play servicesをアップデートorインストールする。
SHA1fingerprintの値を控える
ウィンドウ > 設定 > android > ビルド > SHA1fingerprintをメモしておく
API keyの発行
https://code.google.com/apis/console/?pli=1にアクセス > APIs & auth > APIs > 一覧からGoogle Maps Android API v2を見つけて「ON」にする。
Credentials > Public API accessの「CREATE NEW KEY」 > Android key > テキストエリアに「控えたSHA1fingerprint;eclipseで作ったパッケージ名」を入力 > Create
パッケージにライブラリをインポートする
ファイル > インポート > Android > Existing Android Code Into Workspace > 次へ > 参照 > sdkを置いたフォルダsdkextrasgooglegoogle_play_serviceslibprojectgoogle-play-services_lib > プロジェクトをワークスペースにコピーをチェック > 完了
作ったパッケージを右クリック > プロパティー > Android > ライブラリー > 追加 > google-play-services_lib > OK
AndroidManifest.xmlの編集
下記コードに書き換える。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.study140121googlemaptest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <!-- The following two permissions are not required to use Google Maps Android API v2, but are recommended. --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="パッケージ名.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="取得したAPI Key" /> </application> </manifest> |
変更行をハイライトした。
activity_main.xmlにMap表示用フラグメントをレイアウトする
11 12 13 14 15 |
<fragment android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /> |
実行
MainActivityにFragmentActivityを継承して実行する。
初期位置アフリカ。
どうもこういうことらしいです。
Google Maps Android API v2 で指定した場所を表示する方法
ギニア湾沖海上。
参考サイト
導入の仕方。めっちゃ詳しいです。画像入りで分かりやすいです。
Google Maps Android API v2 による地図の利用
Google Maps Android API v2で出来ること色々
Android Tips #25 Google Maps Android API v2 逆引きリファレンス
風雲ヒルズ城(GoogleMapで色々やってみる)
コード内に色々記述があるので説明割愛。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
package パッケージ名; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; public class MainActivity extends FragmentActivity { private static final LatLng START_POS = new LatLng(緯度, 経度); // 初期座標 LatLngクラスで座標位置を表せる private GoogleMap map; // 地図 private CameraUpdate camera; // カメラ private MarkerOptions markers; // マーカーを設置する設定 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findView(); setup(); } private void findView() { // マネージャを生成 FragmentManager manager = getSupportFragmentManager(); // マネージャがfindFragmentByIdでxmlのid=mapをロード SupportMapFragment frag = (SupportMapFragment) manager.findFragmentById(R.id.map); // フラグメントからマップを生成 map = frag.getMap(); } /* * 地図の設定 */ private void setup() { final CameraPosition pos = new CameraPosition(START_POS, 16.0f, 90.0f, 0.0f); // カメラの基本設定 camera = CameraUpdateFactory.newCameraPosition(pos); // カメラにセット map.moveCamera(camera); // カメラの位置に移動 markers = new MarkerOptions(); // マーカーの準備 markers.position(START_POS); // マーカーの座標を決定 markers.icon(BitmapDescriptorFactory.fromResource(R.drawable.castle)); // マーカーのiconを指定 markers.title("ヒルズ城"); // タップ時に表示されるメッセージ map.addMarker(markers); // マーカーを追加 } } |
CameraPosition (LatLng target, float zoom, float tilt, float bearing)
カメラ位置のパラメータを指定するクラス
第一引数:画面の中心位置。LatLng型なので緯度経度。
第二引数:ズーム。距離のイメージはコチラでどうぞ。
第三引数:ティルト=傾き。視野角。0.0fで真上、90.0fで斜め。0~90の範囲外で指定すると例外を投げる。
第四引数:ベアリング=方角。北は0.0fで時計回りに360.0fで一周。360度以上は0に戻って再計測するので0~360の範囲以上は意味がない。つまり500.0fを指定しても140.0fを指定していることと変わりがない。
コメント
No Trackbacks.