RecyclerView에서 아이템을 거리 순으로 정렬하기
RecyclerView는 Android에서 대량의 데이터 집합을 효율적으로 표시하는데 사용되는 유연한 위젯입니다. 이번 TIL에서는 Kotlin을 사용하여 RecyclerView의 아이템들을 사용자의 현재 위치로부터의 거리를 따라 정렬하는 방법에 대해 알아보겠습니다.
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
}
fun sortItemsByDistance(recyclerView: RecyclerView) {
val sortedList = currentList.sortedBy { item ->
calculateDistanceTo(item.mapx.toDouble(), item.mapy.toDouble(), userLat, userLon)
}
submitList(sortedList.toList()) {
recyclerView.scrollToPosition(0)
}
}