Android Kotlin 아이템 거리 순으로 정렬하기

이성진·2023년 10월 25일
0

TIL

목록 보기
57/95
post-custom-banner

RecyclerView에서 아이템을 거리 순으로 정렬하기

RecyclerView는 Android에서 대량의 데이터 집합을 효율적으로 표시하는데 사용되는 유연한 위젯입니다. 이번 TIL에서는 Kotlin을 사용하여 RecyclerView의 아이템들을 사용자의 현재 위치로부터의 거리를 따라 정렬하는 방법에 대해 알아보겠습니다.

  • 1. 거리 계산하기

    • 먼저 , 두 지점 간의 거리를 계산하는 함수를 만듭니 다. 여기서는 Haversine 공식을 사용하여 지구상의 두 점 간의 거리를 계산합니다.
private fun calculateDistanceTo(
    mapx: Double, mapy: Double,
    userLat: Double, userLon: Double
): Double {
    val R = 6371.0
    val dLat = Math.toRadians(mapy - userLat)
    val dLon = Math.toRadians(mapx - userLon)
    val a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
            Math.cos(Math.toRadians(userLat)) * Math.cos(Math.toRadians(mapy)) *
            Math.sin(dLon / 2) * Math.sin(dLon / 2)
    val c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
    return R * c
}
  • 2. 아이템 정렬하기

    • 리스트의 아이템들을 거리순으로 정렬하기 위해 sortedBy 함수를 사용하여 , 각 아이템의 거리를 계산하는 함수를 인자로 전달합니다.
fun sortItemsByDistance(recyclerView: RecyclerView) {
    val sortedList = currentList.sortedBy { item ->
        calculateDistanceTo(item.mapx.toDouble(), item.mapy.toDouble(), userLat, userLon)
    }
    submitList(sortedList.toList()) {
        recyclerView.scrollToPosition(0)
    }
 }
  • 3. 정렬된 아이템 표시하기

    • 정렬된 아이템 리스트를 submitList 를 사용하여 RecyclerView에 제공하고 , 첫번째 아이템으로 스크롤 됩니다.

이렇게 간단한 과정을 통해 RecyclerView의 아이템들을 사용자의 현재 위치로부터의 거리를 따라 정렬할 수 있습니다. 이 기능은 사용자에게 가장 가까운 위치의 아이템들을 먼저 표시하는 등의 시나리오에서 유용하게 사용될 수 있습니다.

profile
2023.08 ~ Android Kotlin 공부
post-custom-banner

0개의 댓글