모든 준비를 마쳤습니다!

개발을 시작하려면 개발자 문서로 이동하세요.

Google Maps Android API 활성화

개발을 시작하기 위해 Google Developers Console에서 우선적으로 해야 할 일을 몇 가지 소개하겠습니다.

  1. 프로젝트 생성 또는 선택
  2. Google Maps Android API 활성화
  3. 적합한 키 생성
계속

이벤트

Google Maps Android API를 사용하면 지도에서 이벤트를 수신할 수 있습니다.

코드 샘플

Github의 ApiDemos 리포지토리에는 이벤트 및 리스너를 보여주는 샘플이 포함되어 있습니다.

지도 클릭/긴 클릭 이벤트

사용자가 지도의 한 지점을 누를 때 반응하려면 GoogleMap.setOnMapClickListener(OnMapClickListener)를 호출하여 지도에서 설정할 수 있는 OnMapClickListener를 사용하면 됩니다. 사용자가 지도의 임의 위치를 클릭하면(누르면), 사용자가 클릭한 지도의 위치를 나타내는 onMapClick(LatLng) 이벤트를 수신하게 됩니다. 화면에서 해당 위치가 필요하면(픽셀 단위), 지도에서 위도/경도 좌표와 화면 픽셀 좌표 간에 변환할 수 있도록 해주는 Projection을 획득하면 됩니다.

또한 GoogleMap.setOnMapLongClickListener(OnMapLongClickListener)를 호출하여 지도에서 설정할 수 있는 OnMapLongClickListener를 통해 긴 클릭 이벤트를 수신할 수도 있습니다. 이 리스너는 클릭 리스너와 유사하게 작동하고, onMapLongClick(LatLng) 콜백으로 긴 클릭 이벤트에 대한 알림을 받습니다.

라이트 모드에서 클릭 이벤트 비활성화

라이트 모드에서 지도에서 클릭 이벤트를 비활성화하려면 MapView 또는 MapFragment를 포함한 뷰에서 setClickable() 을 호출합니다. 이 방법은 예를 들어, 목록 뷰에 지도를 표시할 때 클릭 이벤트가 지도와 관련이 없는 작업을 호출하도록 하려는 경우에 유용합니다.

클릭 이벤트를 비활성화하는 옵션은 라이트 모드에서만 사용할 수 있습니다. 클릭 이벤트를 비활성화하면 마커도 클릭할 수 없게 됩니다. 지도의 다른 컨트롤에는 영향을 미치지 않습니다.

MapView:

MapView view;
...
view.setClickable(false);

MapFragment:

MapFragment fragment;
...
fragment.getView().setClickable(false);

카메라 변경 이벤트

지도 뷰는 카메라가 평면을 내려다보는 것으로 모델링되었습니다. 지도의 확대/축소 수준, 뷰포트 및 원근에 영향을 미치는 카메라 속성을 변경할 수 있습니다. 카메라 가이드를 참조하세요. 사용자는 또한 제스처를 만들어서 카메라에 영향을 미칠 수 있습니다.

카메라 변경 리스너를 사용하여 카메라 이동을 추적할 수 있습니다. 카메라 모션 시작, 진행 및 종료 이벤트에 대한 알림을 앱이 수신할 수 있습니다. 또한 카메라가 움직이는 이유, 즉 이 움직임이 사용자 제스처에 의해 발생했는지, 기본 제공 API 애니메이션에 의해 발생했는지 또는 개발자가 제어하는 움직임에 의해 발생했는지 여부를 알 수 있습니다.

다음 샘플에서는 사용 가능한 모든 카메라 이벤트 리스너를 보여줍니다.

public class MyCameraActivity extends FragmentActivity implements
        OnCameraMoveStartedListener,
        OnCameraMoveListener,
        OnCameraMoveCanceledListener,
        OnCameraIdleListener,
        OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_camera);

        SupportMapFragment mapFragment =
            (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap map) {
        mMap = map;

        mMap.setOnCameraIdleListener(this);
        mMap.setOnCameraMoveStartedListener(this);
        mMap.setOnCameraMoveListener(this);
        mMap.setOnCameraMoveCanceledListener(this);

        // Show Sydney on map.
        mMap.moveCamera(CameraUpdateFactory
                .newLatLngZoom(new LatLng(-33.87365, 151.20689), 10));
    }

    @Override
    public void onCameraMoveStarted(int reason) {

        if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
            Toast.makeText(this, "The user gestured on the map.",
                           Toast.LENGTH_SHORT).show();
        } else if (reason == OnCameraMoveStartedListener
                                .REASON_API_ANIMATION) {
            Toast.makeText(this, "The user tapped something on the map.",
                           Toast.LENGTH_SHORT).show();
        } else if (reason == OnCameraMoveStartedListener
                                .REASON_DEVELOPER_ANIMATION) {
            Toast.makeText(this, "The app moved the camera.",
                           Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onCameraMove() {
        Toast.makeText(this, "The camera is moving.",
                       Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCameraMoveCanceled() {
        Toast.makeText(this, "Camera movement canceled.",
                       Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCameraIdle() {
        Toast.makeText(this, "The camera has stopped moving.",
                       Toast.LENGTH_SHORT).show();
    }
}

다음과 같은 카메라 리스너를 사용할 수 있습니다.

  • 카메라가 움직이기 시작하면 OnCameraMoveStartedListeneronCameraMoveStarted() 콜백이 호출됩니다. 이 콜백 메서드는 카메라 모션에 대해 reason을 수신합니다. 그 이유는 다음 중 하나일 수 있습니다.

    • REASON_GESTURE는 지도상의 사용자 제스처(예: 패닝, 틸트, 손가락을 모아서 확대/축소 또는 지도 회전)에 응답하여 카메라가 움직였음을 나타냅니다.
    • REASON_API_ANIMATION은 비제스처 사용자 동작(예: 확대/축소 버튼 누르기, My Location 버튼 누르기 또는 마커 클릭)에 응답하여 API가 카메라를 움직였음을 나타냅니다.
    • REASON_DEVELOPER_ANIMATION은 앱이 카메라 이동을 시작했음을 나타냅니다.
  • 카메라가 움직이거나 사용자가 터치 스크린과 상호작용 중에 OnCameraMoveListeneronCameraMove() 콜백이 여러 번 호출됩니다. 콜백이 호출되는 빈도에 관해서는, API가 프레임당 한번씩 콜백을 호출한다는 것입니다. 그러나 이 콜백은 비동기적으로 호출되므로, 화면에 보이는 것과 동기화되지 않습니다. 또한 onCameraMove() 콜백과 그 다음 콜백 사이에 카메라 위치가 변경되지 않고 그대로 유지될 가능성도 있습니다.

  • 카메라가 움직임을 멈추고 사용자가 지도와의 상호작용을 중단한 경우 OnCameraIdleListenerOnCameraIdle() 콜백이 호출됩니다.

  • 현재 카메라 움직임이 중단된 경우 OnCameraMoveCanceledListenerOnCameraMoveCanceled() 콜백이 호출됩니다. OnCameraMoveCanceled() 콜백 직후에는 새 reason과 함께 onCameraMoveStarted() 콜백이 호출됩니다.

    앱이 명시적으로 GoogleMap.stopAnimation()을 호출하는 경우, OnCameraMoveCanceled() 콜백이 호출되지만 onCameraMoveStarted() 콜백은 호출되지 않습니다.

지도상에 리스너를 설정하려면 관련 set-listener 메서드를 호출하세요. 예를 들어, OnCameraMoveStartedListener에서 콜백을 요청하려면 GoogleMap.setOnCameraMoveStartedListener()를 호출하세요.

카메라의 대상(위도/경도), 확대/축소, 베어링 및 틸트를 CameraPosition에서 가져올 수 있습니다. 이들 속성에 대한 자세한 내용은 카메라 위치 가이드를 참조하세요.

사업체 및 기타 관심 지점의 이벤트

기본적으로, 관심 지점(POI)은 해당 아이콘과 함께 기본 지도에 나타납니다. POI에는 공원, 학교, 정부 건물 등 뿐만 아니라 상점, 식당, 호텔 등의 사업체 POI가 포함됩니다.

POI의 클릭 이벤트에 응답할 수 있습니다. 사업체 및 기타 관심 지점 가이드를 참조하세요.

실내 지도 이벤트

이벤트를 사용하여 실내 지도를 찾고 활성 레벨을 사용자 지정할 수 있습니다. OnIndoorStateChangeListener 인터페이스를 사용하여, 새로운 건물이 초점에 잡히거나 건물에서 새로운 레벨이 활성화될 때 호출하도록 리스너를 설정합니다.

GoogleMap.getFocusedBuilding()을 호출하여 현재 초점에 잡힌 건물을 가져옵니다. 일반적으로 특정 위도/경도에 지도의 중심을 두면 해당 위도/경도에 있는 건물을 제공하지만 반드시 그런 것은 아닙니다.

그런 다음 IndoorBuilding.getActiveLevelIndex()를 호출하여 현재 활성화된 레벨을 찾을 수 있습니다.

IndoorBuilding building = mMap.getFocusedBuilding();
if (building == null) {
  return null;
}
return building.getLevels().get(building.getActiveLevelIndex());

이는 활성 레벨에 대해 사용자 지정 마크업을 표시하려는 경우에 유용합니다. 예: 마커, 그라운드 오버레이, 타일 오버레이, 폴리곤, 폴리라인 및 기타 셰이프.

힌트: 거리 레벨로 돌아가려면, IndoorBuilding.getDefaultLevelIndex()를 통해 기본 레벨을 가져오고 IndoorLevel.activate()를 통해 활성 레벨로 설정합니다.

마커 및 정보 창 이벤트

마커 클릭이나 드래그 이벤트를 포함한 마커 이벤트를 수신하고 반응할 수 있습니다. 마커가 속한 GoogleMap 객체에서 해당 리스너를 설정하면 됩니다. 마커 이벤트 가이드를 참조하세요.

정보 창에서 이벤트를 수신할 수도 있습니다.

도형 및 오버레이 이벤트

폴리라인, 폴리곤, 그라운드 오버레이의 클릭 이벤트를 수신하고 응답할 수 있습니다.

다음에 대한 의견 보내기...

Google Maps Android API
Google Maps Android API
도움이 필요하시나요? 지원 페이지를 방문하세요.