在 jetcompose 中使用 canvas 绘制对话泡泡

drawing a speech bubble using canvas in jetcompose

我想在 jetcompose 中使用 canvas 绘制对话泡泡,但我不知道如何 在矩形的底端画一个箭头
这是我的代码:

@Composable
fun DrawBubble(modifier: Modifier = Modifier) {
Box(modifier = modifier) {
    Canvas(modifier = Modifier.matchParentSize()) {
        val clipPath = Path().apply {
            lineTo(size.width, 0f)
            lineTo(size.width, 30f)
            lineTo(size.width, size.height)
            lineTo(0f, size.height)
            close()
        }
        clipPath(clipPath) {
            drawRoundRect(
                color = Color(0xffff0000),
                size = size,
                cornerRadius = CornerRadius(30f)
            )
        }
    }
}
}

我在想这样的事情:

但这是我的输出:

任何帮助将不胜感激

经过几次尝试,我终于画了这个:

代码:

@Composable
fun DrawBubble(
modifier: Modifier = Modifier
) {

Box(modifier = modifier) {
    val zero = 0.dp
    val fifty = 50.dp
    Canvas(modifier.matchParentSize().align(Alignment.Center)) {
        val clipPath = Path().apply {
            moveTo(zero.toPx(), fifty.toPx())
            quadraticBezierTo(5.dp.toPx(), 25.dp.toPx(), 40.dp.toPx(), 15.dp.toPx())
            quadraticBezierTo(60.dp.toPx(), 11.dp.toPx(), 80.dp.toPx(), 11.dp.toPx())
            quadraticBezierTo(60.dp.toPx(), 9.dp.toPx(), 140.dp.toPx(), 11.dp.toPx())
            quadraticBezierTo(190.dp.toPx(), 15.dp.toPx(), 200.dp.toPx(), 50.dp.toPx())
            quadraticBezierTo(200.dp.toPx(), 100.dp.toPx(), 100.dp.toPx(), 100.dp.toPx())
            quadraticBezierTo(0.dp.toPx(), 100.dp.toPx(), 0.dp.toPx(), 50.dp.toPx())
            /* lineTo(size.width, 0f)
             lineTo(size.width, 30f)
             lineTo(size.width, size.height)
             lineTo(0f, size.height)*/
            close()
            moveTo(180.dp.toPx(), 85.dp.toPx())

            lineTo(180.dp.toPx(), 90.dp.toPx())

            quadraticBezierTo(180.dp.toPx(), 100.dp.toPx(), 170.dp.toPx(), 125.dp.toPx())
            lineTo(140.dp.toPx(), 90.dp.toPx())
            close()
        }
        clipPath(clipPath) {
            drawPath(
                clipPath,
                color = Orange.copy(alpha = 0.7f),
            )
        }
    }
    Text(
        text = "click here to add task",
        fontSize = 12.sp,
        fontFamily = FontFamily.Monospace,
        fontWeight = FontWeight.Bold,
        modifier = Modifier.align(Alignment.Center).padding(bottom = 15.dp)
    )

}
}