У меня есть список, и когда пользователь выбирает элемент списка, деталь представляет собой карту Google с некоторыми маркерами этого выбранного элемента. < /p>
Если я покажу его в портрете, Все работает, но если я отображаю его в ландшафте, список и детали видны одновременно, а затем работает правильно один раз. < /p>
, когда я впервые выбираю элемент, Карта отображается, и анимация для центра, камера, работает отлично (у меня есть запускающий эффект, который сосредотачивает ее после загрузки маркеров). Но когда я выбираю другой элемент, карта не центрирует камеру, а старые маркеры не удаляются, вместо этого более новые нарисованы на карте, а камера не перемещается.
Как это решить?ListDetailPaneScaffold(
modifier = Modifier.fillMaxSize(),
directive = navigator.scaffoldDirective,
value = navigator.scaffoldValue,
listPane = {
AnimatedPane {
LinesList(
lines = uiState.lines,
onItemClick = { index ->
navigator.navigateTo(ListDetailPaneScaffoldRole.Detail, index)
},
)
}
},
detailPane = {
AnimatedPane {
navigator.currentDestination?.content?.let { index ->
vm.selectLine(uiState.lines[index])
MapPanel(mapState = uiState.mapState)
}
}
},
)
< /code>
Моя карта: < /p>
@Composable
fun MapPanel(
mapState: MapState,
modifier: Modifier = Modifier
) {
val showMarkers: Boolean by remember { derivedStateOf { cameraPositionState.position.zoom > minZoomForVisibleMarkers } } // default 15
val boundsBuilder = LatLngBounds.builder()
GoogleMap(
modifier = modifier.fillMaxSize(),
cameraPositionState = cameraPositionState
) {
val bitmapDescriptor: BitmapDescriptor by remember { mutableStateOf(BitmapDescriptorFactory.fromResource(R.drawable.place)) }
for (busStop in mapState.busStops) {
val markerState = rememberMarkerState(
position = LatLng(busStop.lat, busStop.lon)
)
Marker(
state = markerState,
icon = bitmapDescriptor,
visible = showMarkers,
onClick = {
selectBusStop(busStop)
false
}
)
boundsBuilder.include(markerState.position)
}
if (centerInMarkers && mapState.busStops.isNotEmpty()) {
LaunchedEffect(key1 = true ) {
cameraPositionState.animate(
update = CameraUpdateFactory.newLatLngBounds(bounds, 100)
)
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... ist-detail
Иметь дело с картами в списке/детализации ⇐ Android
Форум для тех, кто программирует под Android
1739205331
Anonymous
У меня есть список, и когда пользователь выбирает элемент списка, деталь представляет собой карту Google с некоторыми маркерами этого выбранного элемента. < /p>
Если я покажу его в портрете, Все работает, но если я отображаю его в ландшафте, список и детали видны одновременно, а затем работает правильно один раз. < /p>
, когда я впервые выбираю элемент, Карта отображается, и анимация для центра, камера, работает отлично (у меня есть запускающий эффект, который сосредотачивает ее после загрузки маркеров). Но когда я выбираю другой элемент, карта не центрирует камеру, а старые маркеры не удаляются, вместо этого более новые нарисованы на карте, а камера не перемещается.
Как это решить?ListDetailPaneScaffold(
modifier = Modifier.fillMaxSize(),
directive = navigator.scaffoldDirective,
value = navigator.scaffoldValue,
listPane = {
AnimatedPane {
LinesList(
lines = uiState.lines,
onItemClick = { index ->
navigator.navigateTo(ListDetailPaneScaffoldRole.Detail, index)
},
)
}
},
detailPane = {
AnimatedPane {
navigator.currentDestination?.content?.let { index ->
vm.selectLine(uiState.lines[index])
MapPanel(mapState = uiState.mapState)
}
}
},
)
< /code>
Моя карта: < /p>
@Composable
fun MapPanel(
mapState: MapState,
modifier: Modifier = Modifier
) {
val showMarkers: Boolean by remember { derivedStateOf { cameraPositionState.position.zoom > minZoomForVisibleMarkers } } // default 15
val boundsBuilder = LatLngBounds.builder()
GoogleMap(
modifier = modifier.fillMaxSize(),
cameraPositionState = cameraPositionState
) {
val bitmapDescriptor: BitmapDescriptor by remember { mutableStateOf(BitmapDescriptorFactory.fromResource(R.drawable.place)) }
for (busStop in mapState.busStops) {
val markerState = rememberMarkerState(
position = LatLng(busStop.lat, busStop.lon)
)
Marker(
state = markerState,
icon = bitmapDescriptor,
visible = showMarkers,
onClick = {
selectBusStop(busStop)
false
}
)
boundsBuilder.include(markerState.position)
}
if (centerInMarkers && mapState.busStops.isNotEmpty()) {
LaunchedEffect(key1 = true ) {
cameraPositionState.animate(
update = CameraUpdateFactory.newLatLngBounds(bounds, 100)
)
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79427703/deal-with-maps-in-list-detail[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия