android 如何在Jetpack Compose中从DrawScope调用@Composable函数?

zbdgwd5y  于 2023-09-29  发布在  Android
关注(0)|答案(1)|浏览(166)

我画条形图。我想在列表的末尾画一个带有动画的加载栏(作为一个单独的函数),但是我不能调用@Composable函数。错误代码:
@Composable调用只能在@Composable函数的上下文中发生

  1. @Composable
  2. fun Chart(
  3. modifier: Modifier = Modifier,
  4. model: BarData
  5. ) {
  6. Column(modifier = modifier) {
  7. Canvas(
  8. modifier = Modifier
  9. .weight(1f)
  10. .fillMaxWidth()
  11. ) {
  12. val radius = 45f
  13. val (paidBarHeight, incomingBarHeight) = computeBarsHeights(
  14. paidRatioAnim,
  15. incomingRatioAnim,
  16. size
  17. )
  18. if(!model.isLoading) {
  19. rotate(180f, pivot = size.center) {
  20. drawRoundRect(
  21. color = ChartBackgroundGreyColor,
  22. size = size.copy(height = incomingBarHeight),
  23. cornerRadius = CornerRadius(radius, radius)
  24. )
  25. drawRoundRect(
  26. color = ChartBasicGreenColor,
  27. size = size.copy(height = paidBarHeight),
  28. cornerRadius = CornerRadius(radius, radius)
  29. )
  30. }
  31. } else {
  32. //HOW TO DRAW LOADING BAR
  33. }
  34. }

} }个文件夹

f45qwnt8

f45qwnt81#

正如您所看到的,Canvas可组合对象不允许您直接在其中绘制。在这方面,它类似于LazyColumn。您需要使用DrawScope方法来绘制所需的内容。
在这种情况下,您应该在Canvas外部绘制加载栏:

  1. Column(modifier = modifier) {
  2. if (model.isLoading) {
  3. // draw loader
  4. } else
  5. Canvas(...)
  6. }
  7. }

相关问题