как прокрутить до центра элемента 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Элемент списка

0 ответов

Другие вопросы по тегам