暂停图像加载在线圈onscroll在lazycolumn在jetpack组成Android

m1m5dgzv  于 2023-08-01  发布在  Android
关注(0)|答案(2)|浏览(97)

暂停图像加载在线圈onscroll在lazycolumn在jetpack组成Android
我们正在使用线圈加载图像与喷气背包组成,早先在滑翔与recylerview或其他列表,我们有选择暂停加载图像时,我们滚动,这是一个有效的方式来防止滞后滚动,有没有办法实现这一点.

stszievb

stszievb1#

根据指南,在Coil 2.x中,他们已经做到了这一点。根据指南的这一部分


的数据
事实上,这是coil 2.0中的issue之一,当scoped被取消时,它没有取消请求。此问题已解决。

ldioqlga

ldioqlga2#

您可以检查项目是否可见,您可以加载图像,否则不加载它。

val state = rememberLazyListState()
val fullyVisibleIndices: List<Int> by remember {
    derivedStateOf {
        val layoutInfo = state.layoutInfo
        val visibleItemsInfo = layoutInfo.visibleItemsInfo
        if (visibleItemsInfo.isEmpty()) {
            emptyList()
        } else {
            val fullyVisibleItemsInfo = visibleItemsInfo.toMutableList()

            val lastItem = fullyVisibleItemsInfo.last()

            val viewportHeight = layoutInfo.viewportEndOffset + layoutInfo.viewportStartOffset

            if (lastItem.offset + lastItem.size > viewportHeight) {
                fullyVisibleItemsInfo.removeLast()
            }

            val firstItemIfLeft = fullyVisibleItemsInfo.firstOrNull()
            if (firstItemIfLeft != null && firstItemIfLeft.offset < layoutInfo.viewportStartOffset) {
                fullyVisibleItemsInfo.removeFirst()
            }

            fullyVisibleItemsInfo.map { it.index }
        }
    }
}
LazyColumn(
    state = state,
    contentPadding = PaddingValues(30.dp)
) {
    items(100) { index -> 
        val isVisible by remember(index) {
            derivedStateOf {
                fullyVisibleIndices.contains(index)
            }
        }
        Text(
            index.toString(),
            modifier = Modifier
                .background(if (isVisible) Color.Green else Color.Transparent)
                .padding(30.dp)
        )
    }
}

字符串

相关问题