728x90
https://stickode.tistory.com/461
osmdroid 사용은 위 포스터를 참고해주세요.
이번시간에는 맵뷰를 클릭시 해당 지점에 마커가 생성되게 하겠습니다.
우선, 지난 작성하셨던 포스팅까지는 진행이 되었다고 가정하겠습니다.
1. Main Activity Layout에 마지막 위치의 위경도를 텍스트로 띄워 줄 textView를 하나 추가 합니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<org.osmdroid.views.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textStyle="bold"
android:textSize="32sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
2. 터치시 좌측 상단에 지도상에서 터치한 곳의 위도와 경도가 표시되고, 길게 누른 경우 마커가 표시되게 리스너를 작성하고 붙여줍니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mapView = findViewById<MapView>(R.id.mapView)
val mapController = mapView.controller
mapController.setZoom(15.0)
val startPoint = GeoPoint(37.5665, 126.9780);
mapController.setCenter(startPoint);
Configuration.getInstance().userAgentValue = BuildConfig.APPLICATION_ID
mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE)
val tvDescription = findViewById<TextView>(R.id.description)
val mapEventsReceiver = object : MapEventsReceiver {
override fun singleTapConfirmedHelper(p: GeoPoint?): Boolean {
if (p != null) {
tvDescription.text = "터치 지점 : \n위도 ${String.format("%.6f", p?.latitude)} \n경도 ${String.format("%.6f", p?.longitude)}"
return true
}
return false
}
override fun longPressHelper(p: GeoPoint?): Boolean {
if (p == null) {
return false
}
val startMarker = Marker(mapView)
startMarker.position = p
startMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
mapView.overlays.add(startMarker)
mapView.invalidate()
return true
}
}
val mapEventsOverlay = MapEventsOverlay(mapEventsReceiver)
mapView.overlays.add(mapEventsOverlay)
}
}
--
결과물
'안드로이드 코틀린' 카테고리의 다른 글
[Android][Kotlin] gif 이미지로 스플래시(Splash) 화면 만들기 (0) | 2022.05.19 |
---|---|
[Kotlin][Android] 상태바 - Status bar 다루기 (색깔 바꾸기) (0) | 2022.05.18 |
[Kotlin][Android] API 키 없이 지도 사용하기 - Osmdroid (0) | 2022.05.14 |
[Kotlin][Android] 스피너 만들기 (0) | 2022.05.13 |
[Kotlin][Android] setOnItemSelectedListener 을 이용한 Bottom Navigation (0) | 2022.05.07 |