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

zbdgwd5y  于 12个月前  发布在  Android
关注(0)|答案(1)|浏览(130)

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

@Composable
fun Chart(
    modifier: Modifier = Modifier,
    model: BarData
) {
    Column(modifier = modifier) {
        Canvas(
            modifier = Modifier
                .weight(1f)
                .fillMaxWidth()
            
        ) {
            val radius = 45f
            
            val (paidBarHeight, incomingBarHeight) = computeBarsHeights(
                paidRatioAnim,
                incomingRatioAnim,
                size
            )

            if(!model.isLoading) {
                rotate(180f, pivot = size.center) {
                    drawRoundRect(
                        color = ChartBackgroundGreyColor,
                        size = size.copy(height = incomingBarHeight),
                        cornerRadius = CornerRadius(radius, radius)
                    )
                    drawRoundRect(
                        color = ChartBasicGreenColor,
                        size = size.copy(height = paidBarHeight),
                        cornerRadius = CornerRadius(radius, radius)
                    )
                }
            } else {
                //HOW TO DRAW LOADING BAR
            }
        }

} }个文件夹

f45qwnt8

f45qwnt81#

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

Column(modifier = modifier) {
        if (model.isLoading) {
            // draw loader
        } else
           Canvas(...)
        }
    }

相关问题