안녕하세요. 이번 포스팅에서는 Naver map api에서 기기의 방향에 맞춰 지도 북쪽이 따라가도록 해보겠습니다.
Naver Map api 사용법은 홈페이지 및 블로그에 많이 나와있지만 사용자의 방향을 따라가는건 안나와있어서 한번 만들어보았습니다.
필요 개념: Sensor, naver map
먼저 코드 보시겠습니다.
최초 onCreate 부분에서 혹은 onStart 등 view 생성전,중에 아래와 같이 sensor와 sensorManger를 만들어줍니다.
sensorManager = requireActivity().getSystemService(Context.SENSOR_SERVICE) as SensorManager
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)
sensorManager는 우리가 사용할 센서를 가지고있다가 등록 및 해제 시킬때 사용할겁니다.
sensor는 기기의 어떤 sensor를 쓸것인지 저장하는 부분이며 기기 방향을 인식할때는 TYPE_ORIENTATION을 사용합니다. 이후 특정 버튼이나 상황의 이벤트에 아래 코드를 통해 map View에 붙여줄겁니다.
private lateinit var sensorManager: SensorManager
private lateinit var sensor : Sensor
private var sensorEvent : SensorEventListener = object :SensorEventListener{
override fun onSensorChanged(event: SensorEvent?) {}
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {}
}
fun setRotateToMap(){
if(isNaver){
(mapView as NaverMap).apply {
sensorEvent = object :SensorEventListener{
override fun onSensorChanged(event: SensorEvent?) {
if (event?.sensor?.type == Sensor.TYPE_ORIENTATION) {
moveCamera(
CameraUpdate.withParams((CameraUpdateParams()).rotateTo(event.values[0].toDouble()))
.animate(CameraAnimation.Easing)
.reason(-2)
)
}
}
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {}
}
sensorManager.registerListener(sensorEvent, sensor, SensorManager.SENSOR_DELAY_UI)
}
}
}
fun unRegisterRotateToMap(){
sensorManager.unregisterListener(sensorEvent)
}
sensorEvent를 통해 저희가 지정한 sensor 변수의 이벤트와 동일할 이벤트를 가져옵니다.
if (event?.sensor?.type == Sensor.TYPE_ORIENTATION)
만약 다른 센서들도 사용한다면 Sensor.(해당 센서) 로 하시면 됩니다.
이후 지도의 카메라를 각도에 따라 reotateTo를 통해 회전하도록 합니다.
moveCamera(
CameraUpdate.withParams((CameraUpdateParams()).rotateTo(event.values[0].toDouble()))
.animate(CameraAnimation.Easing)
.reason(-2)
)
여기서 만약 3차원도 움직이고 싶다면 tiltTo를 사용하시면 됩니다.
방위 값은 event.value[0] 이며 z축의 회전 값은 event.value[1] 에 값을 조금 조정하여 사용하시면 기기의 방향에 따라 지도도 같이 회전하여 휴대폰 방향에 맞춰집니다.
'안드로이드 > androidstudio' 카테고리의 다른 글
[Android] 동적으로 View, Layout 크기, 위치 변경 (LayoutParams) (0) | 2023.10.12 |
---|---|
[Android] DataStore, Preference 활용 설정 값 저장하기 (0) | 2023.10.06 |
[Android] device 디스플레이 환경설정 크기 변경에 영향 안받기 (0) | 2023.03.05 |
[Android] Kakao Map Marker event(drag, click) (0) | 2022.12.09 |
[Android] livedata의 observe 중첩 상황 (0) | 2022.12.08 |