今年的疫情蠻嚴重的,希望大家都過得安好,希望疫情快點過去,能回到一些線下技術聚會的時光~
今天目標:了解 Compose UI 上 的 animation change color 跟 gradient 可以怎麼實作。
昨天最後的程式碼執行起來會是這樣
今天的程式碼如下:
@Composable
fun ColorChangeDemo() {
val isGreen =r emember{mutableStateOf(value = true)}
val animatedColor = animateColorAsState(
if (isGreen.value) Color.Green else Color.Red
)
// 宣告 animate color 的程式碼
Column( modifier = Modifier.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp)){
Button( onClick =
{isGreen.value = !isGreen.value},
colors = ButtonDefaults.buttonColors(
backgroundColor = Color.Transparent)
){ Text(text = "Animate Color Change") }
Box( modifier = Modifier
.fillMaxWidth()
.height(200.dp)
.background(animatedColor.value))
val color = if (isGreen.value) Color.Green else Color.Red
Box( modifier = Modifier
.fillMaxWidth()
.height(200.dp)
.background(color)
)
}
}
顯示圖如下:
設定好animate後,Compose UI就會幫我們實作動畫變色的部分,
提到顏色變化,我順便研究了如 UI 想要 漸層的話,應該怎麼做?
@Composable
fun ColorChange2Demo() {
val horizontalGradientBrush = Brush.horizontalGradient(
colors =listOf(
Color.Blue,
Color.Red,
Color.White
)
)
val horizontalGradientBrush2 = Brush.horizontalGradient(
colors =listOf(
Color.White,
Color.Red,
Color.Blue
)
)
val isGreen =remember{mutableStateOf(value = true)}
val isHorizontal1 =remember{mutableStateOf(value = true)}
val animatedColor =animateColorAsState(
if (isGreen.value) Color.Green else Color.Red
)
Column(
modifier = Modifier.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp)
){
Button(
onClick ={
isGreen.value = !isGreen.value
isHorizontal1.value = !isHorizontal1.value
},
colors = ButtonDefaults.buttonColors(
backgroundColor = Color.Transparent
)
){
Text(
text = "Animate Color Change",
modifier = Modifier.background(
brush = if(isHorizontal1.value) horizontalGradientBrush
else horizontalGradientBrush2)
)
}
Box(
modifier = Modifier
.fillMaxWidth()
.height(200.dp)
.background(animatedColor.value)
)
val color = if (isGreen.value) Color.Green else Color.Red
Box(
modifier = Modifier
.fillMaxWidth()
.height(200.dp)
.background(color)
)
}
}
這樣就可以囉!
顯示如下:
顯示顏色變化的部分就這樣~其實還有蠻多設定,不過就留給你們研究囉!
明天見!
參考資料:
本文同步發表在 Medium 上: 文章連結