android - Jetpack Compose 表面添加自定义阴影

标签 android kotlin android-jetpack-compose android-jetpack

enter image description here
我正在尝试在 jetpack compose 中开发一个自定义工具栏,但它的阴影适用于四个侧面,但我想实现 3 个侧面阴影(顶部不需要)

Surface(
    shape = RectangleShape,
    color = toolBarBackground(),
    elevation = 12.dp,
) {
    ...
}
我尝试过自定义形状,但问题是路径必须关闭。我做了一个简单的勾号,如下所示来克服这个问题,但没有工作(组件大小本身发生变化)。
private val CustomThreeSideShape = GenericShape { size, _ ->
    moveTo(0f, -100f)
    lineTo(0f, size.height)
    lineTo(size.width, size.height)
    lineTo(size.width, -100f)
    lineTo(0f, -100f)
    close()
}

最佳答案

这还不支持,星this issue更新。
同时,您可以将这个技巧与 Modifier.drawWithContent 一起使用。结合 DrawScope.clipRect :

val padding = 20.dp
val density = LocalDensity.current
Surface(
    shape = RectangleShape,
    color = Color.White,
    elevation = 12.dp,
    modifier = Modifier
        .padding(padding)
        .drawWithContent {
            val paddingPx = with(density) { padding.toPx() }
            clipRect(
                left = -paddingPx,
                top = 0f,
                right = size.width + paddingPx,
                bottom = size.height + paddingPx
            ) {
                this@drawWithContent.drawContent()
            }
        }
) {
    Text(
        "Hello",
        modifier = Modifier.padding(10.dp).fillMaxWidth()
    )
}
结果:
enter image description here

关于android - Jetpack Compose 表面添加自定义阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69914311/

相关文章:

c# - 如何在 .net 中加密文件并在 android 中解密

android,提供导航服务

android - 如何模块化地为不同版本的应用程序保留服务器端应用程序

android - 即使正确安装了 KVM 并启用了 BIOS 支持,AVD 仍拒绝启动

android - 如何改进 kotlin lambda 语法?

java - 如何用 Java 或 Kotlin 解析大型 YAML 文件?

java - 如何在 Kotlin 中使用 Lambda handleHeavyContent()

android - Jetpack Compose 如何创建具有特定大小和配置的 ImageBitmap?

android - 初始相机位置 Google Maps Compose

android - Jetpack Compose - 边框上带有弧形的 CardView