Ren*_*ele 6 android android-jetpack-compose ripple-effect
在这个答案中,我弄错了波纹动画。您知道如何使用 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.
Run Code Online (Sandbox Code Playgroud)
//如果我放波纹半径200 dp(它是卡片的高度)波纹效果不正常。
Gab*_*tti 69
从 M2 开始,1.0.0-beta08您可以使用onClick中的 lambda 参数而不是Card修饰符来解决此问题clickable:
Card(
shape = RoundedCornerShape(30.dp),
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
onClick = { show = !show }
){
//card content
}
Run Code Online (Sandbox Code Playgroud)
如果您需要clickable或combinedClickable修饰符,则必须使用不带参数的变体onClick,并将clip修饰符也应用于Card使用相同Card形状的:
val shape = RoundedCornerShape(30.dp)
Card(
shape = shape,
modifier = Modifier
//...height, width, padding
.clip(shape)
.combinedClickable(
onLongClick = { /** do something */ },
onClick = { /** do something */ }
)
){
//card content
}
Run Code Online (Sandbox Code Playgroud)
使用 M3,Card您也可以做同样的事情。
在对波纹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")
}
}
Run Code Online (Sandbox Code Playgroud)
小智 33
到目前为止我已经确定了两个选项:
.clip修改器使用相同的形状来裁剪卡片:Card(
shape = RoundedCornerShape(30.dp),
modifier = Modifier
.clip(RoundedCornerShape(30.dp))
.clickable {
//do something
}
) {
Box {
Text("Text")
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是高程阴影也会被剪辑,因此您的卡片会丢失它的阴影。
.clickable卡片上的内容可组合: Card(
shape = RoundedCornerShape(30.dp)
) {
Box(
modifier = Modifier.clickable {
//do something
}
) {
Text("Text")
}
}
Run Code Online (Sandbox Code Playgroud)
小智 15
我检查了卡片/表面可组合项的来源,发现您需要具有相同形状的背景和剪辑修改器。例如,下面的 Box 具有圆角形状,并且点击波纹以相同的边界被切割:
val shape = RoundedCornerShape(16.dp)
Box(
modifier = Modifier
.background(
color = Color.Yellow,
shape = shape
)
.clip(shape)
.clickable { onClick() },
) {
// your content here
}
Run Code Online (Sandbox Code Playgroud)
AI *_*kil 11
希望这能为您提供最简单的解决方案
只需在修饰符参数中添加.clip(RoundedCornerShape(30.dp))
这是完整的代码:
Card(modifier = Modifier
.padding(30.dp)
.size(100.dp)
.clip(RoundedCornerShape(30.dp))
.clickable {
// After clip //
}) { }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
987 次 |
| 最近记录: |