Android Google 지도 예제 튜토리얼
이 튜토리얼에서는 애플리케이션에서 Android Google Maps API의 몇 가지 흥미로운 기능에 대해 논의하고 구현합니다. 토론에 들어가기 전에. Android Google 지도 설정을 완료했는지 확인하세요. 전제 조건입니다.
Android Google Maps API 개요
이 튜토리얼에서는 Android Google Maps API에서 제공하는 몇 가지 흥미로운 기능을 구현합니다. 기능에는 지도 마커, 지도 유형, 카메라 애니메이션 등이 포함됩니다. 이전 자습서에서 수행한 것처럼 content_main.xml
레이아웃에 지도 조각을 추가합니다. 이렇게 하면 MapFragment가 MainActivity
에 연결됩니다. MainActivity
클래스에서 GoogleMap 개체를 확보하려면 OnMapReadyCallback
인터페이스를 구현하고 onMapReady
콜백 메서드를 재정의해야 합니다.
Google 지도 유형 설정
Google 지도 개체를 사용하여 지도 유형도 변경할 수 있습니다. 네 가지 유형의 맵이 있으며 각각 다른 맵 보기를 제공합니다. 이러한 유형은 일반, 하이브리드, 위성 및 지형입니다. 아래와 같이 사용할 수 있습니다.
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 options)
: 이 메소드는 지도에 원을 추가합니다.addPolygon(PolygonOptions options)
: 이 메소드는 지도에 폴리곤을 추가합니다.addTileOverlay(TileOverlayOptions options)
: 이 메소드는 지도에 타일 오버레이를 추가합니다.animateCamera(CameraUpdate update)
: 애니메이션으로 업데이트에 따라 지도를 이동하는 메소드clear()
: 이 메소드는 지도에서 모든 것을 제거합니다.getMyLocation()
: 이 메서드는 현재 표시된 사용자 위치를 반환합니다.moveCamera(CameraUpdate 업데이트)
: 이 메서드는 업데이트에 정의된 지침에 따라 카메라 위치를 변경합니다.setTrafficEnabled(boolean enabled)
: 이 메서드는 트래픽 레이어를 켜거나 끕니다.snapshot(GoogleMap.SnapshotReadyCallback 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 객체는 인스턴스화되어 위도 및 경도 double 값과 함께 전달됩니다.
Android Google Maps 예제 프로젝트 구조
Android Google 지도 예제 코드
MainActivity.java는 아래와 같이 정의됩니다.
package com.journaldev.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.journaldev.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 애플리케이션 프로젝트 다운로드