AndroidでGoogleMapアプリ作成
第1回 表示
第2回 表示形式 衛星、地図、地形図
第3回 マーカーと直線
第4回 googleMapのエラー
第5回 PlaceAPIとマーカーのセット
第6回 現在地 GPSの実装
第7回 トラッキング
第8回 様々な技法
第1回で使用したプロジェクトをそのまま使います。今回は地図の表示を切り替えます。
衛星画像モードで表示
MAP_TYPE_SATELLITEの指定を行います。
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
他のタイプをまとめますと
GoogleMapタイプ | |
MAP_TYPE_NORMAL | 通常マップ |
MAP_TYPE_SATELLITE | 衛星画像 |
MAP_TYPE_HYBRID | ハイブリッド |
MAP_TYPE_TERRAIN | 地形図 |
MAP_TYPE_NONE | なし |
切り替えButtonの設置
切り替えボタンをレイアウトに追加しましょう。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="net.honeybread.directionthat.MainActivity"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="20dp" android:layout_marginTop="20dp" android:text="Map Type Button" android:id="@+id/mapTypeButton"/> </RelativeLayout>
※RelativeLayoutに変更しています。Buttonタグはfragmentタグの後に。そうしなければ隠れてしまいます。(回避策がないわけではないですが)
Buttonリスナーを実装
コードに以下を追加します
Button mapTypeButton; int mapTypeFlagInt;
としたうえで、onMapReadyに以下を追加し、setMapTypeメソッドも追加します。
ボタンをタップするごとにカウントアップし、5の時に0に戻します。
mapTypeButton = (Button)findViewById(R.id.mapTypeButton); mapTypeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mapTypeFlagInt++; if(mapTypeFlagInt==5)mapTypeFlagInt=0; setMapType(mapTypeFlagInt); } });
メソッドの追加。各数値に応じてマップを表示します。
public void setMapType(int mapType){ switch (mapType) { case 0: mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); break; case 1: mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); break; case 2: mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); break; case 3: mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); break; case 4: mMap.setMapType(GoogleMap.MAP_TYPE_NONE); break; } }
まとめソースコード
AndroidStudioでのMap作成ではデフォルトでextends FragmentActivityとなっています。このままではレイアウトXMLで指定したvectorDrawableは表示されません。レイアウトで指定したvectorDrawableを表示する際はAppCompatActivityとします。
少し書き方を修正します。
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { GoogleMap mMap; double mtFujiLatDouble = 35.360556; double mtFujiLngDouble = 138.727778; LatLng targetLatLng= new LatLng(mtFujiLatDouble ,mtFujiLngDouble ); CameraPosition cameraPosition; Button mapTypeButton; int mapTypeFlagInt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapTypeButton = (Button) findViewById(R.id.mapTypeButton); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; cameraPosition = new CameraPosition.Builder() .target(targetLatLng).zoom(mMap.getMaxZoomLevel()-3) .bearing(90) .build(); mMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); // mMap.moveCamera(CameraUpdateFactory.newLatLng(targetLatLng)); // mMap.moveCamera(CameraUpdateFactory.zoomTo(mMap.getMaxZoomLevel()-3)); mapTypeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mapTypeFlagInt++; if (mapTypeFlagInt == 4) mapTypeFlagInt = 0; setMapType(mapTypeFlagInt); } }); } public void setMapType(int mapType){ switch (mapType) { case 0: mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); break; case 1: mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); break; case 2: mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); break; case 3: mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); break; } } }
実行して左上Buttonをタップしてみましょう。地図が切り替わります。
ハイブリッドは以下のように。
では次回はマップにマーカーや、直線を描く方法を説明します。
おまけ
こんな書き方も。
int[] mapTypeArray= { GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_SATELLITE, GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_TERRAIN};
として、
mMap.setMapType(mapTypeArray[mapTypeFlagInt]);
とします。