MapWidget

지도에 시각적인 UI 요소를 직접 디자인하고 표시 할 수 있습니다.

1. Overview


MapWidget 은 Widget GUI Components 를 통해 사용자가 자유롭게 UI 를 디자인 할 수 있습니다. 그리고, 지도의 기울기와 회전과 상관없이 항상 일정하게 보이는 특징이 있습니다. MapWidget 과 Compass, ScaleBar 는 화면 좌표상의 특정 지점에 그려지는데, InfoWindow 는 지도의 특정 위치 좌표상에 그려집니다.

Compass & ScaleBar
InfoWindow

2. MapWidgetManager


MapWidgetManager 는 MapWidget 과 관련 된 최상의 클래스이며, InfoWindowLayer 와 MapWidgetLayer 를 가지고 있습니다. 다른 지도 API 와 다르게 MapWidet 은 Layer 를 사용자가 생성 및 추가하지 않고 빌트인 되어 있는 Layer 만 이용합니다.

// MapWidgetManager 를 가져오는 방법
kakaoMap.getMapWidgetManager();

3. InfoWindowLayer


InfoWindowLayer 는 InfoWindow 의 생성 및 삭제와 같은 객체관리를 하는 컨테이너 역할을 합니다.

// InfoWindowLayer 를 가져오는 방법
kakaoMap.getMapWidgetManager().getInfoWindowLayer();

4. MapWidgetLayer


MapWidgetLayer 는 MapWidget 의 생성 및 삭제와 같은 객체관리를 하는 컨테이너 역할을 합니다.

// InfoWindowLayer 를 가져오는 방법
kakaoMap.getMapWidgetManager().getMapWidgetLayer();

5. Gui Components


MapWidget 은 GuiCompoent 들로 구성됩니다. GuiCompoent 를 통해 사용자가 자유롭게 UI 를 디자인 할 수 있습니다. MapWidget 의 전체크기는 그 안에 그려진 Gui Component 의 최종 크기 입니다.

UI 를 구성 할 수 있는 GuiCompoent 종류

아래의 GuiComponent 를 가지고 다양한 MapWidget 과 InfoWindow 를 설정할 수 있습니다.

Component Description
GuiLayout 여러 개의 child component 를 가질 수 있고, Orientation 에 따라 child 가 가로로 추가 될 지, 세로로 추가 될 지 결정된다.
GuiImage 이미지를 나타내는 component 이고, 하나의 child component 를 가질 수 있다.
GuiText 텍스트를 표시 할 수 있는 component 이고, child component 를 가질 수 없다.
GuiButton 클릭 이벤트를 가질 수 있는 component 이고, 하나의 child component 를 가질 수 있다.
GuiAnimatedImage gif 처럼 애니메이션 되는 이미지를 나타내는 component 이고, 하나의 child component 를 가질 수 있다.

GuiCompoent 들의 공통 Property

아래의 GuiComponent 를 가지고 다양한 MapWidget 과 InfoWindow 를 설정할 수 있습니다.

Component Description
id Gui Component 를 구분할 수 있는 고유한 id. MapWidget 클릭 시, id 를 통해 어떤 component 가 클릭 됐는지 알 수 있다.
origin 해당 component 가 root component 를 가지고 있을 때, root component 크기 내에서 그려지는 기준이 된다.
align component 가 배치되는 정렬 방향이다.
padding 컴포넌트 기준으로 상하좌우의 여백이다.

GuiLayout

여러 개의 child component 를 가질 수 있고, Orientation 에 따라 child 가 가로로 추가 될 지, 세로로 추가 될 지 결정됩니다.

GuiLayout 을 활용하는 예제코드

// 1. Orientation.Vertical 으로 레이아웃 생성
GuiLayout layout = new GuiLayout(Orientation.Horizontal);
layout.setId("myLayout");
body.setPadding(15, 15, 15, 13);

// 2. 레이아웃에 넣을 bgImage 를 추가
layout.setBackground(new GuiImage(R.drawable.window_body, false));

// 3. 레이아웃에 텍스트 추가
GuiText text = new GuiText("안녕하세요!");
text.setTextSize(23);
text.setPadding(0, 0, 13, 0);

// 4. 레이아웃에 이미지 추가
GuiImage starImage = new GuiImage(R.drawable.star, false);
layout.addView(starImage);

GuiImage

이미지를 나타내는 component 이고, 하나의 child component 를 가질 수 있습니다. GuiImage 안에 포함 된 child 의 크기만큼 이미지를 늘어나게 됩니다. child 크기만큼 늘어나지 않아아야 하는 이미지 영역은 fixedArea 로 크기를 설정 할 수 있습니다.

아래는 말풍선 이미지 각 모서리의 둥근 부분만큼(7px)은 늘어나지 않도록 FixedArea 를 설정하여 고정된 예제 이미지입니다.

image

FixedArea 를 설정 할 때는 GuiImage 생성 할 때 isNinepatch 를 true 로 설정해야 합니다.

GuiLayout body = new GuiLayout(Orientation.Horizontal);
body.setId("bubble_style");
body.setPadding(20, 20, 20, 18);

// isNinepatch 는 true 로 설정
GuiImage image = new GuiImage(R.drawable.window_body, true);
image.setFixedArea(7, 7, 7, 7); // fixedArea, 단위는 px
body.setBackground(image);

GuiText text = new GuiText("InfoWindow!");
text.setTextSize(30);
body.addView(text);

GuiText

텍스트를 표시 할 수 있는 component 이고, child component 를 가질 수 없습니다.

GuiButton

클릭 이벤트를 가질 수 있는 component 이고, 하나의 child component 를 가질 수 있습니다.

GuiAnimatedImage

gif 처럼 애니메이션 되는 이미지를 나타내는 component 이고, 하나의 child component 를 가질 수 있습니다.


MapWidget

GUI Components 를 통해 사용자가 자유롭게 디자인 할 수 있습니다. 그리고, 지도의 기울기와 회전과 상관없이 항상 일정하게 보이는 특징이 있습니다.

InfoWindow

Body 와 Tail 의 구조를 가지고 있어 주로 말풍선 같은 UI 를 만들 때 사용합니다.

Compass & ScaleBar

지도에서는 나침반(Compass)과 축척(ScaleBar)를 기본 MapWidget 으로 제공합니다.