Day 20 Compose UI Animation II (change color & gradient)

今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~

今天目标:了解 Compose UI 上 的 animation change color 跟 gradient 可以怎麽实作。

昨天最後的程序码执行起来会是这样

Untitled

今天的程序码如下:

@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)
        )
}
}

这样就可以罗!

显示如下:

Untitled

显示颜色变化的部分就这样~其实还有蛮多设定,不过就留给你们研究罗!

明天见!

参考资料:

本文同步发表在 Medium 上: 文章连结


<<:  Day10 - 物理模拟篇 - 弹跳球世界I - 成为Canvas Ninja ~ 理解2D渲染的精髓

>>:  DAY10:验证码辨识(三)

Jetpack Compose - Stateful and Stateless

相较於传统的 Android View,Jetpack Compose 在 Android 开发上还...

IT铁人DAY 20-Proxy 代理模式

  今天要介绍的模式是属於结构型模式的一种,此模式的名称我想大多数的人都听过或是知道它是做甚麽用的,...

[Day 6]中秋时在做什麽,有没有空,可以帮想标题吗(前端篇)

今天要先来看Native Camp的流程,首先是点击注册後的页面, 有信箱和密码,还有SSO的选项,...

[Day21]ISO 27001 附录 A.9 存取控制

这个章节的重点就是权限。 最小权限原则,全部关掉只开放给有特殊身份的授权人员。 所以稽核的重点就在於...