Я создал карту вот так
Код: Выделить всё
@Composable
private fun HoaxLocatorScreen(
cameraPosition: CameraPositionState,
userMarkerState: MarkerState,
userMarkerKey: PersistentList,
hoaxLocation: HoaxLocation,
hoaxVenues: ImmutableList,
onClusterTap: () -> Unit,
) {
GoogleMap(
cameraPositionState = cameraPosition,
modifier = Modifier
.fillMaxSize()
) {
when (hoaxLocation) {
HoaxLocation.HoaxFineLocation -> {
MarkerComposable(
userMarkerKey,
state = userMarkerState
) {
HoaxUserFineLocationIndicator()
}
}
is HoaxLocation.HoaxCoarseLocation -> {
hoaxLocation.radius?.toDouble()?.let { locationRadius ->
Circle(
center = userMarkerState.position,
radius = locationRadius,
fillColor = HoaxYellow.copy(alpha = 0.3f),
strokeColor = HoaxYellow,
strokeWidth = 2f
)
}
}
HoaxLocation.HoaxUnknownLocation -> {
}
}
HoaxClustering(
hoaxVenues = hoaxVenues,
)
}
}
Код: Выделить всё
@Composable
fun HoaxClustering(
hoaxVenues: ImmutableList,
) {
val clusterManager = rememberClusterManager()
clusterManager?.algorithm =
PreCachingAlgorithmDecorator(NonHierarchicalDistanceBasedAlgorithm())
val renderer = rememberClusterRenderer(
clusterContent = { hoaxVenueCluster ->
HoaxClusterItem(
size = hoaxVenueCluster.size
)
},
clusterItemContent = { hoaxVenue ->
HoaxVenueMarker()
},
clusterManager = clusterManager,
)
SideEffect {
clusterManager ?: return@SideEffect
clusterManager.setOnClusterClickListener {
false
}
clusterManager.setOnClusterItemClickListener {
false
}
clusterManager.setOnClusterItemInfoWindowClickListener {
}
}
SideEffect {
if (clusterManager?.renderer != renderer) {
clusterManager?.renderer = renderer ?: return@SideEffect
}
}
if (clusterManager != null) {
Clustering(
items = hoaxVenues,
clusterManager = clusterManager,
)
}
}
Да, я проверил и не делаю сумасшедшего количества рекомпозиций.
Я пробовал использовать этот алгоритм, который показывает только те маркеры, которые виден на экране, но в сочетании с кластеризацией это плохой выбор (количество маркеров кластера становится динамическим и меняется в зависимости от положения просмотра)
Что я могу сделать?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ering-slow
Мобильная версия