如何在 Jetpack Compose 中为 canvas 中的路径绘制阴影
How can I draw a shadow for a path in canvas in jetpack compose
我正在为 Jetpack Compose 中的顶部栏绘制自定义形状。我想给路径画个影子。
val topBarShapePath = Path().apply {
moveTo(dpToPixels(leftPadding), 0f)
lineTo(dpToPixels(leftPadding), dpToPixels(dpValue = 110.dp))
arcTo(
Rect(
dpToPixels(leftPadding),
dpToPixels(dpValue = 110.dp),
dpToPixels(dpValue = 32.dp),
dpToPixels(dpValue = 135.dp)
), -180f, -90f, true)
lineTo(
dpToPixels(dpValue = triangleStartX),
dpToPixels(dpValue = rectHeight))
lineTo(
dpToPixels(dpValue = screenWidth),
dpToPixels(dpValue = triangleEndY)
)
lineTo(dpToPixels(dpValue = screenWidth), 0f)
lineTo(dpToPixels(dpValue = leftPadding), 0f)
}
Column(
modifier = Modifier
.fillMaxWidth()
.height(400.dp)
.drawBehind {
val finalWidth = 40.dp.toPx()
drawPath(
topBarShapePath,
color = topbarcolor)
drawOutline(
outline = Outline.Generic(
topBarShapePath),
brush = Brush.horizontalGradient(),
style = Stroke(
width = 1.dp.toPx(),
)
)
}
)
这是我用来绘制形状的代码,“drawOutline”试图为路径绘制阴影,但我不知道如何模糊线条。
感谢任何帮助。
这是我要查找的结果的屏幕截图:
目前无法在 Canvas 中绘制阴影,但您可以使用 Modifier.shadow
来绘制阴影,指定所需的自定义形状,如下所示:
class TopBarShape(/*some parameters*/): Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density,
) = Outline.Generic(Path().apply {
// your path code
})
}
Modifier.shadow(elevation = 10.dp, shape = TopBarShape(/*your parameters*/))
遗憾的是,这个修饰符不允许太多修改,it's one 最受关注的 Compose 问题,所以希望它会在未来发生变化,但因为它不是最新的 1.1-beta
我不会至少要等到 1.2
.
如果您仍然认为手动绘制阴影是必需的功能,您可以create a feature request。
我正在为 Jetpack Compose 中的顶部栏绘制自定义形状。我想给路径画个影子。
val topBarShapePath = Path().apply {
moveTo(dpToPixels(leftPadding), 0f)
lineTo(dpToPixels(leftPadding), dpToPixels(dpValue = 110.dp))
arcTo(
Rect(
dpToPixels(leftPadding),
dpToPixels(dpValue = 110.dp),
dpToPixels(dpValue = 32.dp),
dpToPixels(dpValue = 135.dp)
), -180f, -90f, true)
lineTo(
dpToPixels(dpValue = triangleStartX),
dpToPixels(dpValue = rectHeight))
lineTo(
dpToPixels(dpValue = screenWidth),
dpToPixels(dpValue = triangleEndY)
)
lineTo(dpToPixels(dpValue = screenWidth), 0f)
lineTo(dpToPixels(dpValue = leftPadding), 0f)
}
Column(
modifier = Modifier
.fillMaxWidth()
.height(400.dp)
.drawBehind {
val finalWidth = 40.dp.toPx()
drawPath(
topBarShapePath,
color = topbarcolor)
drawOutline(
outline = Outline.Generic(
topBarShapePath),
brush = Brush.horizontalGradient(),
style = Stroke(
width = 1.dp.toPx(),
)
)
}
)
这是我用来绘制形状的代码,“drawOutline”试图为路径绘制阴影,但我不知道如何模糊线条。
感谢任何帮助。
这是我要查找的结果的屏幕截图:
目前无法在 Canvas 中绘制阴影,但您可以使用 Modifier.shadow
来绘制阴影,指定所需的自定义形状,如下所示:
class TopBarShape(/*some parameters*/): Shape {
override fun createOutline(
size: Size,
layoutDirection: LayoutDirection,
density: Density,
) = Outline.Generic(Path().apply {
// your path code
})
}
Modifier.shadow(elevation = 10.dp, shape = TopBarShape(/*your parameters*/))
遗憾的是,这个修饰符不允许太多修改,it's one 最受关注的 Compose 问题,所以希望它会在未来发生变化,但因为它不是最新的 1.1-beta
我不会至少要等到 1.2
.
如果您仍然认为手动绘制阴影是必需的功能,您可以create a feature request。