как прокрутить до центра элемента LazyRow?
Имеет метод, который прокручивается до конца элемента списка
Я хочу прокрутить до центра listItem.
Я могу сделать это, передавscrollOffset
кanimateScrollToItem
, что-то вродеlistItem.width / 2
, но мне не удалось определить ширину элемента списка, который я хочу прокручивать.
The LazyListState
обеспечиваетval visibleItemsInfo: List<LazyListItemInfo>
список, и я могу сделать что-то вроде этого
suspend fun LazyListState.animateScrollEndCenter(index: Int) {
val itemInfo = this.layoutInfo.visibleItemsInfo.firstOrNull { it.index == index }
if (itemInfo != null) {
val center = this@animateScrollEndCenter.layoutInfo.viewportEndOffset / 2
val itemCenter = itemInfo.offset + itemInfo.size / 2
this@animateScrollEndCenter.animateScrollBy((itemCenter - center).toFloat())
} else {
this@animateScrollEndCenter.animateScrollToItem(index)
}
}
ноvisibleItemsInfo
обнуляемый, поэтому он не содержит информации оlistItem.width
, пока элемент списка не появится на экране
В следующем примере я прокручиваю до listItem 11
Когда на экране
https://stackru.com/images/2eeadc0fd0ddf6adfdb68c22885d412eb8dbd473.gif
Когда вне экрана
https://stackru.com/images/f0fd5734c603a2ef61ffe647b4bfa4a0c30d7545.gif
Я хочу прокрутить до центраLazyRow
Элемент списка