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

이성진·2023년 10월 25일
0

TIL

목록 보기
57/95

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 공부

0개의 댓글