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

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

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

stszievb

stszievb1#

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


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

ldioqlga

ldioqlga2#

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

  1. val state = rememberLazyListState()
  2. val fullyVisibleIndices: List<Int> by remember {
  3. derivedStateOf {
  4. val layoutInfo = state.layoutInfo
  5. val visibleItemsInfo = layoutInfo.visibleItemsInfo
  6. if (visibleItemsInfo.isEmpty()) {
  7. emptyList()
  8. } else {
  9. val fullyVisibleItemsInfo = visibleItemsInfo.toMutableList()
  10. val lastItem = fullyVisibleItemsInfo.last()
  11. val viewportHeight = layoutInfo.viewportEndOffset + layoutInfo.viewportStartOffset
  12. if (lastItem.offset + lastItem.size > viewportHeight) {
  13. fullyVisibleItemsInfo.removeLast()
  14. }
  15. val firstItemIfLeft = fullyVisibleItemsInfo.firstOrNull()
  16. if (firstItemIfLeft != null && firstItemIfLeft.offset < layoutInfo.viewportStartOffset) {
  17. fullyVisibleItemsInfo.removeFirst()
  18. }
  19. fullyVisibleItemsInfo.map { it.index }
  20. }
  21. }
  22. }
  23. LazyColumn(
  24. state = state,
  25. contentPadding = PaddingValues(30.dp)
  26. ) {
  27. items(100) { index ->
  28. val isVisible by remember(index) {
  29. derivedStateOf {
  30. fullyVisibleIndices.contains(index)
  31. }
  32. }
  33. Text(
  34. index.toString(),
  35. modifier = Modifier
  36. .background(if (isVisible) Color.Green else Color.Transparent)
  37. .padding(30.dp)
  38. )
  39. }
  40. }

字符串

展开查看全部

相关问题