Я хочу, чтобы эти две (кнопка + повышенные карты) отображались как содержимое в GoogleMap, чтобы кнопки масштабирования GoogleMap автоматически возвращались в правильное положение на экране.
Код имеет следующий вид:
@Composable
fun GoogleMapView(
modifier: Modifier = Modifier,
context: Context,
location: LatLng,
bounds: LatLngBounds,
listOne: List,
listTwo: List,
onMapLoaded: () -> Unit = {},
content: @Composable () -> Unit = {}
) {
[...]
Box(
modifier = Modifier.fillMaxSize()
) {
Box(Modifier.fillMaxSize()) {
LaunchedEffect(key1 = true) {
cameraPositionState.move(
update = CameraUpdateFactory.newLatLngBounds(bounds, 100)
)
cameraPositionState.move(
update = CameraUpdateFactory.zoomOut()
)
}
GoogleMap(
modifier = modifier,
cameraPositionState = cameraPositionState,
properties = mapProperties,
uiSettings = uiSettings,
onMapLoaded = onMapLoaded
) {
/** Add custom marker that displays user location on the Map */
MarkerComposable(
state = locationState
) {
LocationMarker()
}
val markerClick: (Marker) -> Boolean = {
Log.d(TAG, "${it.title} was clicked")
cameraPositionState.projection?.let { projection ->
Log.d(TAG, "The current projection is: $projection")
}
false
}
markers.forEach { marker ->
AdvancedMarker(
state = marker,
onClick = markerClick,
collisionBehavior = 1
)
}
content()
}
}
}
/** Add go home button */
Column(
modifier = Modifier
.padding(bottom = 100.dp, end = 5.dp)
.fillMaxSize(),
verticalArrangement = Arrangement.Bottom,
horizontalAlignment = Alignment.End
) {
Button(
onClick = {
cameraPositionState.move(
update = CameraUpdateFactory.newLatLngBounds(bounds, 100)
)
cameraPositionState.move(
update = CameraUpdateFactory.zoomOut()
)
cameraPositionState.move(
update = CameraUpdateFactory.zoomOut()
)
cameraPositionState.move(
update = CameraUpdateFactory.zoomOut()
)
cameraPositionState.move(
update = CameraUpdateFactory.zoomOut()
)
}
) {
Box(
modifier = Modifier
.rotate(65f)
) {
Icon(
Icons.Rounded.PlayArrow,
contentDescription = null
)
}
}
}
/** Elevated cards */
ElevatedCards(
objects = objects,
onObjectClick = { }
)
где ElevatedCards можно составить просто:
@Composable
fun ElevatedCards(
modifier: Modifier = Modifier,
objects: List,
onObjectClick: () -> Unit
) {
LazyRow(
modifier = modifier.fillMaxWidth(),
contentPadding = PaddingValues(20.dp)
) {
items(objects) { object ->
if (object != null) {
MapsElevatedCard(
object = object,
onObjectClick = onObjectClick
)
}
}
}
}
и MapsElevatedCard отображает составную ElevatedCard.
Вопрос
Как перенести кнопку и карточки с повышенными правами в качестве контента в GoogleMaps? Прямо сейчас я накладываю поверх GoogleMap и использую отступы для перемещения по полям, содержащим составные элементы, но, как вы можете себе представить, это не масштабируется и не безопасно для устройств, поскольку разные устройства могут иметь разные размеры экрана.
Я хочу включить кнопки и подсказки с повышенными уровнями в элементы управления GoogleMap и позволить GoogleMap корректировать их расположение по мере необходимости.
Я приложил скриншот того, как это выглядит сейчас

Я' Мне хотелось бы, чтобы повышенные карточки располагались внизу экрана с гарантированным заполнением.
Что я пробовал
Я пробовал использовать контент, а также напрямую вызывать компонуемые элементы внутри тела GoogleMap. Однако при попытке я получаю эту ошибку:
java.lang.ClassCastException: androidx.compose.ui.node.LayoutNode cannot be cast to com.google.maps.android.compose.MapNode
Подробнее здесь: https://stackoverflow.com/questions/785 ... tpack-comp