일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Coroutines
- 앱바
- Compose
- viewmodel
- Flutter
- textfield
- Button
- CustomScrollView
- drift
- Navigation
- TEST
- LifeCycle
- Dialog
- Kotlin
- textview
- 테스트
- activity
- livedata
- 계측
- 앱
- scroll
- DART
- appbar
- 안드로이드
- intent
- android
- binding
- data
- ScrollView
- tabbar
- Today
- Total
Study Record
[안드로이드] 네이버 지도 API - 카메라 본문
✍ 네이버 지도 API
https://navermaps.github.io/android-map-sdk/guide-ko/1.html
✍ 카메라
네이버 지도 SDK는 기기 화면 건너편의 지도를 카메라로 바라보는 방식으로 지도를 표현한다. 카메라를 이동, 확대 및 축소, 기울임, 회전시킴으로써 화면에 보이는 지도를 자유자재로 움직일 수 있다.
→ CameraPosition 객체
카메라의 위치를 나타내는 클래스로 한 번 생성된 객체의 속성은 변경할 수 없다.
→ CameraPosition 객체의 카메라 위치 속성
① 대상 지점(target) : 카메라가 놓여 있는 대상 지점의 좌표를 나타내는 속성이다.
② 줌 레벨(zoom) : 줌 레벨은 지도의 축척을 나타내며 작을수록 지도가 축소되고 클수록 확대된다.
③ 기울임 각도(title) : 기울임 각도를 나타내는 속성으로 카메라는 기울임 각도만큼 지면을 비스듬하게 내려다본다. 기울임 각도가 0이면 수직으로 내려다보고 각도가 증가하면 수평에 가깝게 기울어진다. (default : 0)
④ 베어링 각도(bearing) : 베어링은 카메라가 바라보는 방위를 의미한다. ex. 동쪽 : 90도 , 남쪽 : 180도 (default : 0)
// 객체 생성
val cameraPosition = CameraPosition(
LatLng(37.5666102, 126.9783881), // 대상 지점
16.0, // 줌 레벨
20.0, // 기울임 각도
180.0 // 베어링 각도
)
// 카메라 현재 위치 가져오기
val cameraPosition = naverMap.cameraPosition
→ 카메라 초기 옵션 지정
// MapFragment 에서 카메라 설정하기
val options = NaverMapOptions()
.camera(CameraPosition(LatLng(35.1798159, 129.0750222), 8.0))
.mapType(NaverMap.MapType.Terrain)
val mapFragment = MapFragment.newInstance(options)
→ 카메라 움직이기
val cameraPosition = CameraPosition(
LatLng(37.5666102, 126.9783881),
10.0
)
// 지정한 카메라 위치로 이동
val cameraUpdate = CameraUpdate.toCameraPosition(cameraPosition)
// 지정한 좌표로 변경
val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))
// 카메라 대상 지점을 지정한 픽셀만큼 이동
val cameraUpdate = CameraUpdate.scrollBy(PointF())
// 카메라 움직이기
naverMap.moveCamera(cameraUpdate)
→ 카메라 애니메이션
카메라를 움직이기 전에 CameraUpdate.animate()를 호출하면 카메라 이동에 애니메이션을 움직일 수 있다.
# 애니메이션 유형
① None : 애니메이션 없음. 기본 값
② Linear : 일정한 속도로 이동
③ Easing : 부드럽게 가감속하며 이동 - 가까운 거리 적합
④ Fly : 부드럽게 축소됐다가 확대되며 이동 - 먼 거리 적합
// animate(애니메이션 유형, 지속시간)
val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))
.animate(CameraAnimation.Fly, 1000)
naverMap.moveCamera(cameraUpdate)
// 기본 애니메이션 시간 변경
naverMap.defaultCameraAnimationDuration = 500
// 애니메이션 취소
naverMap.cancelTransitions()
→ 카메라 콜백과 이벤트
# 카메라 종료와 취소 이벤트
val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))
.animate(CameraAnimation.Easing, 2000)
.finishCallback {
// 애니메이션이 완료되었을 때 호출
Toast.makeText(context, "카메라 이동 완료", Toast.LENGTH_SHORT).show()
}
.cancelCallback {
// 애니메이션이 지정되어있고 그것을 취소했을 경우에만 호출
Toast.makeText(context, "카메라 이동 취소", Toast.LENGTH_SHORT).show()
}
naverMap.moveCamera(cameraUpdate)
# 카메라 변경 이벤트
// 카메라 변경 이벤트
naverMap.addOnCameraChangeListener { reason, animated ->
Log.i("NaverMap", "카메라 변경 - reson: $reason, animated: $animated")
}
val cameraUpdate = CameraUpdate.scrollTo(LatLng(37.5666102, 126.9783881))
.animate(CameraAnimation.Easing, 2000)
.reason(1000)
naverMap.moveCamera(cameraUpdate)
※ reason
카메라가 변경된 이유를 나타내는 속성으로 미리 정의된 원인은 다음과 같다.
① REASON_DEVELOPER : 개발자가 API를 호출해 카메라가 움직임
② REASON_GESTURE : 사용자의 제스처로 인해 카메라가 움직임
③ REASON_CONTROL : 사용자의 버튼 선택으로 인해 카메라가 움직였음
④ REASON_LOCATION : 위치 트래킹 기능으로 인해 카메라가 움직였음
※ animated
이벤트를 발생시킨 카메라 이동에 애니메이션이 지정되어 있는지 여부를 나타낸다.
# 카메라 대기 이벤트
카메라의 움직임이 끝나고 대기 상태가 되면 호출되는 이벤트다.
※ 대기 상태가 됐을 경우
① 카메라가 애니메이션 없이 움직일 때
② 카메라 애니메이션이 완료될 때
③ NaverMap.cancelTransitions() 가 호출되어 카메라 애니메이션이 명시적으로 취소될 때
naverMap.addOnCameraIdleListener {
Toast.makeText(context, "카메라 움직임 종료", Toast.LENGTH_SHORT).show()
}
→ 카메라 기타 설정
# 카메라 영역 제한
카메라의 대상 지점을 영역 내로 제한한다.
naverMap.extent = LatLngBounds(LatLng(31.43, 122.37), LatLng(44.35, 132.0))
# 최소 및 최대 줌 레벨
// 카메라 줌 레벨을 5~18 범위로 제한
naverMap.minZoom = 5.0
naverMap.maxZoom = 18.0
'안드로이드' 카테고리의 다른 글
[안드로이드] BroadCast Receiver (0) | 2022.05.21 |
---|---|
[안드로이드] sharedPreferences (0) | 2022.05.19 |
[안드로이드] 네이버 지도 API - 위치와 오버레이 사용하기 (0) | 2022.05.15 |
[안드로이드] 네이버 지도 API - 지도 모양 설정 (0) | 2022.05.13 |
[안드로이드] 네이버 지도 API 설정하기 (0) | 2022.05.12 |