你能告訴我為什么當我使用val animateAngle: Float by transition.animateFloat而不是時它停止作業val animateAngle by animateFloatAsState嗎?
rotated單擊按鈕時似乎沒有更新變數。
var rotated by remember {
mutableStateOf(false)
}
val transition = updateTransition(
targetState = rotated,
label = "Rotate"
)
val animateAngle: Float by transition.animateFloat(
transitionSpec = {
tween(2000)
},
label = "Rotate box"
) { state ->
when(state){
rotated -> 360f
else -> 0f
}
}
Column (
) {
Image(
painter = painterResource(id = R.drawable.propeller),
contentDescription = "fan",
modifier = Modifier
.rotate(animateAngle)
.padding(30.dp)
.size(100.dp))
Button(
onClick = {
rotated = !rotated
},
) {
Text(text = "Rotate Box")
}
}
uj5u.com熱心網友回復:
您有一個boolean mutableState用作轉換的targetState,true或者false將成為其目標狀態。
val transition = updateTransition(
targetState = rotated,
label = "Rotate"
)
現在你正在閱讀boolean mutableStatelambdatargetValueByState
when(state) {
rotated -> 360f
else -> 0f
}
并且因為您正在那里閱讀它,所以animationAngle將始終獲得 360f 的值,無論它是true還是false.
我記錄了
Log.e("AnimatedAngle", "$animateAngle : Rotated boolean state [$rotated]")
它列印:
360.0 : Rotated boolean state [false]
360.0 : Rotated boolean state [true]
只需簡單地洗掉它并以targetValueByState這種方式稍微修改塊,您的影片就可以作業了。
val animateAngle: Float by transition.animateFloat(
transitionSpec = {
tween(2000)
},
label = "Rotate box"
) { state ->
if (state) 360f else 0f
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/517641.html
標籤:安卓功能android-jetpack-compose喷气背包组合动画
下一篇:在函式中回傳錯誤陳述句
