[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
https://devtalk.kakao.com/t/faq-api/125610
라벨의 위치를 항상 지도의 가운데에 고정 시키는 방법이 있을까요? 카카오 택시에서 출발지를 선택하는 것처럼요.
setOnCameraMoveEndListener에 라벨표시를 넣으니까 카메라 움직임이 끝나고 나서야 라벨이 이동해요.
[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
https://devtalk.kakao.com/t/faq-api/125610
라벨의 위치를 항상 지도의 가운데에 고정 시키는 방법이 있을까요? 카카오 택시에서 출발지를 선택하는 것처럼요.
setOnCameraMoveEndListener에 라벨표시를 넣으니까 카메라 움직임이 끝나고 나서야 라벨이 이동해요.
지도의 이동과 상관없이 화면좌표에 고정되게 UI 를 표시하기 위해서, MapWidget 을 이용하시면 됩니다.
다만, 카카오택시의 출발지 선택처럼 가운데 위치시키는 것 뿐만 아니라, 해당 출발지 마커의 지도 위치값도 알아야 하고 더 유연하게 사용하시려면 아래와 같이 지도의 MapView 중앙에 Android 의 ImageView 를 위치시키는게 좋을 듯 보여집니다.
1. MapView 가 있는 xml 레이아웃 에서, 특정 이미지를 지도의 중앙에 위치시킴.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.kakao.vectormap.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/iv_center_marker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/blue_marker"
android:paddingBottom="100px"/>
</RelativeLayout>
2. 코드 상에서, 지도 중앙에 있는 ImageView 의 지도 위치값을 계산해옴.
Label centerLabel = kakaoMap.getLabelManager().getLayer()
.addLabel(LabelOptions.from(centerLocation).setStyles(R.drawable.red_dot_marker));
kakaoMap.setOnCameraMoveEndListener(new KakaoMap.OnCameraMoveEndListener() {
@Override
public void onCameraMoveEnd(@NonNull KakaoMap kakaoMap,
@NonNull CameraPosition cameraPosition,
@NonNull GestureType gestureType) {
ImageView ivCenter = findViewById(R.id.iv_center_marker);
// 지도 중앙에 위치한 이미지(iv_center_marker)의 좌표값을 구하는 방법
// 화면상의 특정 위치에 해당하는 지도 좌표값을 구하는 kakaoMap.fromScreenPoint() 함수 활용
// x : iv_center_marker 이미지의 x 값에 이미지 가로크기 1/2 을 더하기
// y : iv_center_marker 이미지의 y 값에 이미지 세로크기를 더하기.추가로 paddingBottom 100px 한 부분을 빼주기
LatLng centerLocation = kakaoMap.fromScreenPoint(
(int) ivCenter.getX() + ivCenter.getWidth() / 2,
(int) ivCenter.getY() + ivCenter.getHeight() - 100);
centerLabel.moveTo(centerLocation); // 라벨의 위치이동 - 계산된 위치값을 확인하기 위한 라벨
}
});