gpt4 book ai didi

android - 在 Jetpack Compose 中缩放按钮动画

转载 作者:行者123 更新时间:2023-12-04 23:46:15 25 4
gpt4 key购买 nike

我想用 Jetpack Compose 从 AirBnB 应用程序中构建这个很棒的按钮动画
1
不幸的是,Animation/Transition API 最近发生了变化,几乎没有文档。有人可以帮我找到正确的方法来实现这个按钮按下动画吗?
编辑
根据@Amirhosein 的回答,我开发了一个按钮,看起来几乎与 Airbnb 示例一模一样
代码:

@Composable
fun AnimatedButton() {
val boxHeight = animatedFloat(initVal = 50f)
val relBoxWidth = animatedFloat(initVal = 1.0f)
val fontSize = animatedFloat(initVal = 16f)

fun animateDimensions() {
boxHeight.animateTo(45f)
relBoxWidth.animateTo(0.95f)
// fontSize.animateTo(14f)
}

fun reverseAnimation() {
boxHeight.animateTo(50f)
relBoxWidth.animateTo(1.0f)
//fontSize.animateTo(16f)
}

Box(
modifier = Modifier
.height(boxHeight.value.dp)
.fillMaxWidth(fraction = relBoxWidth.value)

.clip(RoundedCornerShape(8.dp))
.background(Color.Black)
.clickable { }
.pressIndicatorGestureFilter(
onStart = {
animateDimensions()
},
onStop = {
reverseAnimation()
},
onCancel = {
reverseAnimation()
}
),
contentAlignment = Alignment.Center
) {
Text(text = "Explore Airbnb", fontSize = fontSize.value.sp, color = Color.White)
}
}

视频:
2
不幸的是,我无法弄清楚如何正确地为文本设置动画,因为它目前看起来很糟糕

最佳答案

你在寻找这样的东西吗?

@Composable
fun AnimatedButton() {
val selected = remember { mutableStateOf(false) }
val scale = animateFloatAsState(if (selected.value) 2f else 1f)

Column(
Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(
onClick = { },
modifier = Modifier
.scale(scale.value)
.height(40.dp)
.width(200.dp)
.pointerInteropFilter {
when (it.action) {
MotionEvent.ACTION_DOWN -> {
selected.value = true }

MotionEvent.ACTION_UP -> {
selected.value = false }
}
true
}
) {
Text(text = "Explore Airbnb", fontSize = 15.sp, color = Color.White)
}
}
}

关于android - 在 Jetpack Compose 中缩放按钮动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66251718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com