Когда я фокусирую любое другое представление вокруг карусели, автопрокрутка в это время будет работать правильно, как и ожидалось, но когда я перемещаю фокус на карусель, в этот раз происходит автопрокрутка. остановится. И снова переместите фокус на любое другое представление, чтобы снова работать нормально.
Я хочу автоматически прокручивать все изображения, не останавливая функции автопрокрутки, где фокус меня не волнует, нужна только автопрокрутка.< /p>
Что мне попробовать дальше?
Мой код
Код: Выделить всё
@ExperimentalTvMaterial3Api
@Composable
fun HeroBanner(
focusRequesters: MutableMap
, FocusRequester>,
categoryItem: HomeLayout.CategoryItem,
cateItems: List?,
onFocusChange: (focusState: FocusState, pos: Int) -> Unit,
goToVideoPlayer: (pos: Int, item: HomeLayout.CategoryItem.Item) -> Unit,
) {
val carouselHeight = LocalConfiguration.current.screenHeightDp.dp.times(0.60f)
var carouselCurrentIndex by rememberSaveable { mutableIntStateOf(0) }
val carouselState = rememberCarouselState()
var isCarouselFocused by remember { mutableStateOf(false) }
LaunchedEffect(carouselState.activeItemIndex) {
carouselCurrentIndex = carouselState.activeItemIndex
}
val fr = remember { FocusRequester() }
focusRequesters[Pair(categoryItem.id, 0)] = fr
if (cateItems != null) {
Spacer(modifier = Modifier.height(20.dp))
cateItems.sortedBy { it.priority }
AnimatedContent(targetState = cateItems,
label = "Featured Carousel animation",
modifier = Modifier
.fillMaxWidth()
.height(carouselHeight)
.padding(start = 20.dp, end = 20.dp)
.focusRequester(fr)
.onFocusChanged {
onFocusChange(it, 0)
// Because the carousel itself never gets the focus
isCarouselFocused = it.hasFocus
}) { itemState ->
Carousel(modifier = Modifier
.onFocusChanged {
Log.e("TAG", "HeroBanner: focus ${it.isFocused}")
// onFocusChange(it, 0)
}
.fillMaxSize()
.semantics {
contentDescription = "MoviesCarousel"
}
.handleDPadKeyEvents(onEnter = {
goToVideoPlayer(
carouselState.activeItemIndex,
cateItems[carouselState.activeItemIndex]
)
}),
itemCount = itemState.size,
carouselState = carouselState,
carouselIndicator = {
Box(modifier = Modifier
.padding(10.dp)
.graphicsLayer {
clip = true
shape = ShapeDefaults.ExtraSmall
}
.align(Alignment.BottomEnd)) {
CarouselDefaults.IndicatorRow(
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(8.dp),
itemCount = itemState.size,
activeItemIndex = carouselState.activeItemIndex,
)
}
},
contentTransformStartToEnd = CarouselDefaults.contentTransform,
contentTransformEndToStart = CarouselDefaults.contentTransform,
autoScrollDurationMillis = 5000,
content = { index ->
val item = remember(index) { itemState[index] }
HeroBannerContent(item = item, categoryItem = categoryItem) {
goToVideoPlayer(carouselState.activeItemIndex, item)
}
})
}
Spacer(modifier = Modifier.height(10.dp))
}
}
В этот раз автопрокрутка будет работать нормально.
но когда затем я перемещаю фокус на карусель
Журнал: HeroBanner: фокус истинный
Так что теперь автопрокрутка остановится.
Мое требование — автоматическая прокрутка продолжается даже при фокусе карусели или нет.
Примечание. Этот код предназначен для приложения Android Tv.
Подробнее здесь: https://stackoverflow.com/questions/785 ... ck-compose
Мобильная версия