11

这个答案中,我得到了错误的波纹动画。你知道如何使用 Jetpack Compose 创建带圆角的波纹吗?

使用默认波纹我有这个:
波纹

代码:

Card(shape = RoundedCornerShape(30.dp),
        border = BorderStroke(width = 2.dp, color = buttonColor(LocalContext.current)),
        backgroundColor = backColor(LocalContext.current),
        modifier = Modifier
            .fillMaxWidth()
            .padding(10.dp)
            .clickable(
                interactionSource = remember { MutableInteractionSource() },
                indication = rememberRipple(radius = 30.dp)
            ) { show = !show }
    ) { ... } //Show is animation of other element.

//如果我将波纹半径设置为 200 dp(这是卡片的高度)波纹工作不正常。

4

2 回答 2

10

从你开始,你可以使用参数而不是修饰符1.0.0-beta08来解决这个问题:onClickCardclickable

Card(shape = RoundedCornerShape(30.dp),
    modifier = Modifier
        .fillMaxWidth()
        .padding(10.dp),
    onClick = { show = !show }
) 

在对波纹1.0.0-beta07应用.clickable修改器之前Card,不会被布局的边界剪裁。

作为解决方法,您可以将.clickable修饰符应用于卡片的内容(例如 a Box):

    Card(
        shape = RoundedCornerShape(30.dp),
        border = BorderStroke(width = 2.dp, color = Color.Blue),
        backgroundColor = Color.White,
        modifier = Modifier
            .fillMaxWidth()
            .padding(10.dp)

    ) {
        Box(Modifier
              .clickable(
                  onClick = { /* ...*/ }
              )
        ){
            Text("Text")
        }
    }
于 2021-03-26T15:54:44.803 回答
6

到目前为止,我已经确定了 2 个选项:

  1. 除了设置形状外,使用.clip修饰符将卡片剪裁成相同的形状:
Card(
    shape = RoundedCornerShape(30.dp),
    modifier = Modifier
        .clip(RoundedCornerShape(30.dp))
        .clickable {
                //do something
        }
) {
    Box {
        Text("Text")
    }
}

这种方法的缺点是高程阴影也会被剪辑,因此您的卡片会丢失它的阴影。

  1. 设置.clickable卡片内容可组合:
 Card(
    shape = RoundedCornerShape(30.dp)
) {
    Box(
        modifier = Modifier.clickable {
                //do something
        }
    ) {
        Text("Text")
    }
}
于 2021-04-03T12:47:46.437 回答