アンドロイドのGoogleマップの例題チュートリアル
このチュートリアルでは、Android Google Maps APIのいくつかの興味深い機能について話し合い、アプリケーションに実装します。話し合いに入る前に、Android Google Mapsのセットアップを完了していることを確認してください。これは前提条件です。
AndroidのGoogle Maps APIの概要
このチュートリアルでは、Android Google Maps APIが提供するいくつかの興味深い機能を実装します。機能にはマップマーカー、マップタイプ、カメラアニメーションなどが含まれます。前のチュートリアルで行ったように、content_main.xmlレイアウトにマップフラグメントを追加します。これにより、MapFragmentがMainActivityに関連付けられます。MainActivityクラスでGoogleMapオブジェクトを取得するには、OnMapReadyCallbackインターフェースを実装し、onMapReadyコールバックメソッドをオーバーライドする必要があります。
Googleマップの設定を変更する
Googleマップオブジェクトを使用すると、マップの種類も変更することができます。マップには4種類あり、それぞれが異なる表示を提供しています。これらのタイプは、通常、ハイブリッド、衛星、地形です。以下のように使用することができます。
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
Googleマップのズーム、回転
以下のコード行を使用して、地図のズームと回転を有効/無効にすることができます。
googleMap.getUiSettings().setZoomGesturesEnabled(true);
googleMap.getUiSettings().setRotateGesturesEnabled(true);
GoogleMapクラスで利用できる他のカスタマイズ方法は以下に示されています。
-
- addCircle(circleOptions) : このメソッドは、円を地図に追加します。
-
- addPolygon(polygonOptions) : このメソッドは、ポリゴンを地図に追加します。
-
- addTileOverlay(tileOverlayOptions) : このメソッドは、タイルオーバーレイを地図に追加します。
-
- animateCamera(cameraUpdate) : このメソッドは、更新情報に応じて地図をアニメーションで移動させます。
-
- clear() : このメソッドは、地図からすべての要素を削除します。
-
- getMyLocation() : このメソッドは、現在表示されているユーザーの位置情報を返します。
-
- moveCamera(cameraUpdate) : このメソッドは、更新情報で定義された指示に基づいてカメラの位置を再配置します。
-
- setTrafficEnabled(enabled) : このメソッドは、交通情報レイヤーをオンまたはオフに切り替えます。
-
- snapshot(callback) : このメソッドは、地図のスクリーンショットを撮影します。
- stopAnimation() : このメソッドは、現在進行中のカメラアニメーションを停止します。
Googleマップにマーカーを追加する
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.4233438,-122.0728817))
.title("LinkedIn")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.4629101,-122.2449094))
.title("Facebook")
.snippet("Facebook HQ: Menlo Park"));
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.3092293,-122.1136845))
.title("Apple"));
snippet()は、マーカーがタップされたときに追加のデータを表示するために使用されます。特定の箇所にカメラをアニメーションさせたり移動させるには、以下のスニペットを使用します。
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.4233438,-122.0728817),16));
上記のコードでは、16はズームレベル番号です。地図は指定されたLatLngオブジェクトにズームインして中心に表示されます。注意:LatLngオブジェクトは緯度と経度の浮動小数点値でインスタンス化され、渡されます。
AndroidのGoogleマップの例のプロジェクト構造の一つは、次のようなものです。
アンドロイドのGoogleマップの例のコード
MainActivity.javaは以下のように定義されています:
package com.scdev.MapsInAction;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
SupportMapFragment mapFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.4233438, -122.0728817))
.title("LinkedIn")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.4629101,-122.2449094))
.title("Facebook")
.snippet("Facebook HQ: Menlo Park"));
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.3092293, -122.1136845))
.title("Apple"));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.4233438, -122.0728817), 10));
}
});
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onMapReady(GoogleMap googleMap) {
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.4233438, -122.0728817))
.title("LinkedIn")
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.4629101,-122.2449094))
.title("Facebook")
.snippet("Facebook HQ: Menlo Park"));
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(37.3092293, -122.1136845))
.title("Apple"));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.4233438, -122.0728817), 10));
}
}
私たちは、SupportMapFragmentオブジェクトに対してgetMapAsync()を呼び出してコールバックを登録します。FloatingActionButtonは、異なるマップタイプで新しいOnMapReadyCallBackメソッドを呼び出します。content_main.xmlには、以下に示すようにMapFragmentが含まれています。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.scdev.MapsInAction.MainActivity"
tools:showIn="@layout/activity_main">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_gravity="center"
android:layout_height="match_parent"
/>
</RelativeLayout>
GoogleマップのAndroidアプリケーションプロジェクトをダウンロードしてください。