이번 포스팅에서는 저번에 했던 kakao map에서 마커를 터치하여 drag 하는 것과 클릭을 읽어오는 이벤트를 포스팅하겠습니다. 먼저 마커와 관련된 이벤트는 POIItemEventListener에 있습니다. 그리고 POIItemEventListener 는 MapView에 있어 사용시 MapView.POIItemEventListener 을 extends 시킴으로써 내장된 함수들을 사용할 수 있습니다.
MapView.POIItemEventListener
아래가 extends 시킬시 implements 시킬 맴버들입니다. 위에부터 순서대로 해당 item에 focus가 갔을때, marker의 infoWindow를 터치했을때 2종류(기본형, 커스텀 말풍선 사용시), 그리고 마지막으로 marker을 longClick 하여 drag 했을때의 함수입니다.
override fun onPOIItemSelected(p0: MapView?, p1: MapPOIItem?) {}
override fun onCalloutBalloonOfPOIItemTouched(p0: MapView?, p1: MapPOIItem?) {}
override fun onCalloutBalloonOfPOIItemTouched(p0: MapView?, p1: MapPOIItem?, p2: MapPOIItem.CalloutBalloonButtonType?){}
override fun onDraggablePOIItemMoved(p0: MapView?, p1: MapPOIItem?, p2: MapPoint?) {}
별도의 class를 만들어 activity나 fragment에 사용할수도 있고 activity 나 fragment에 extends 하여 바로 함수를 불러서 사용할수도 있습니다. 저같은 경우 별도의 class를 만드는 습관이 되있으나 mvvm 방식이나 실시간 livedata와 연동하여 obsrve 안에 사용해야할때는 전자가 더 편한것 같습니다.
class는 아래와 같이 만들어 사용하면 되겠습니다.
class POIEventClickListener(context: Context?, private val owner: Fragment = Fragment()):MapView.POIItemEventListener {
override fun onCalloutBalloonOfPOIItemTouched(mapView: MapView?, poiItem: MapPOIItem?, buttonType: MapPOIItem.CalloutBalloonButtonType?) {}
override fun onPOIItemSelected(p0: MapView?, poiItem: MapPOIItem?) {
}
override fun onCalloutBalloonOfPOIItemTouched(p0: MapView?, p1: MapPOIItem?) {}
override fun onDraggablePOIItemMoved(p0: MapView?, p1: MapPOIItem?, p2: MapPoint?) {
}
만약 drag에서 변하는 좌표를 얻고십다면 아래 p2.p2.mapPointGeoCoord 로 위도, 경도를 얻을수있습니다.
override fun onDraggablePOIItemMoved(p0: MapView?, p1: MapPOIItem?, p2: MapPoint?) {
if (p2 != null) {
Log.e(TAG,"이동한 마커 좌표: ${p2.mapPointGeoCoord.latitude} ${p2.mapPointGeoCoord.longitude}")
}
}
그리고 activity나 fragment에서 사용하여 변한 값을 저장하거나 변하게 해야할 경우 아래 코드처럼 변수를 통해 접근하게 하여 사용 가능합니다.
class Activity: AppCompatActivity() ,MapView.POIItemEventListener{
var latitude = "37.5143225723"
var longitude = "127.062831022"
/*생략*/
private fun setBtnTypeAdd(Table : table){
SheetList.add(latitude,longitude) // 저장용 sheet
}
/*생략*/
override fun onDraggablePOIItemMoved(p0: MapView?, p1: MapPOIItem?, p2: MapPoint?) {
if (p2 != null) {
latitude = p2.mapPointGeoCoord.latitude.toString()
longitude = p2.mapPointGeoCoord.longitude.toString()
}
}
kakaomap 이 사이트에 설명도 잘 되어있고 sample 코드가 있다보니 처음 사용하는 입장에서 사용하기 매우 좋다고 생각합니다. 혹시 용어나 사용법에 오류가 있다면 말씀해주시면 바로 수정하겠습니다. 감사합니다.
'안드로이드 > androidstudio' 카테고리의 다른 글
[Android] NaverMap api 기기 방향 탐지 (0) | 2023.04.21 |
---|---|
[Android] device 디스플레이 환경설정 크기 변경에 영향 안받기 (0) | 2023.03.05 |
[Android] livedata의 observe 중첩 상황 (0) | 2022.12.08 |
[Android] retrofit 통해 data 가져오기 (0) | 2022.12.06 |
[Android] TimePicker, DatePicker (0) | 2022.12.05 |