ComposeUI条件语句与动画

if条件语句

ComposeUI中if条件语句的基本用法。

  • Name
    基本语法
    Type
    if-syntax
    Description
    • if 单一条件判断
    • if-else 二选一
    • if-else if 多条件判断
    • 条件中的布尔表达式
  • Name
    使用场景
    Type
    use-cases
    Description
    • 控制组件显示/隐藏
    • 根据状态切换组件
    • 条件性修饰符应用
    • 动态内容渲染

if条件示例

@Composable
fun ContentView() {
    var isShowingDetail by remember { mutableStateOf(false) }
    
    Column {
        // 简单if条件
        if (isShowingDetail) {
            Text("详细信息")
        }
        
        // if-else条件
        if (isShowingDetail) {
            Text("显示状态")
        } else {
            Text("隐藏状态")
        }
        
        Button(onClick = { isShowingDetail = !isShowingDetail }) {
            Text("切换")
        }
    }
}

条件表达式

使用when表达式实现简洁的条件判断。

  • Name
    语法格式
    Type
    syntax
    Description
    • when 表达式
    • 多分支条件
    • 与修饰符配合
    • 用于计算属性
  • Name
    应用技巧
    Type
    tips
    Description
    • 多选一场景
    • 动态样式设置
    • 文本内容切换
    • 状态颜色变化

条件表达式示例

@Composable
fun StatusView() {
    var isActive by remember { mutableStateOf(false) }
    
    Text(
        text = if (isActive) "激活" else "未激活",
        color = if (isActive) Color.Green else Color.Red,
        style = MaterialTheme.typography.titleLarge,
        modifier = Modifier.clickable { isActive = !isActive }
    )
}

条件动画

基于条件状态的简单动画效果。

  • Name
    动画类型
    Type
    animation-types
    Description
    • 渐隐渐现
    • 缩放动画
    • 位移动画
    • 旋转动画
  • Name
    动画配置
    Type
    animation-config
    Description
    • 动画时长
    • 动画曲线
    • 动画延迟
    • 重复次数

条件动画示例

@Composable
fun AnimatedView() {
    var isExpanded by remember { mutableStateOf(false) }
    
    Column {
        Box(
            modifier = Modifier
                .size(
                    animateDpAsState(
                        targetValue = if (isExpanded) 200.dp else 100.dp,
                        animationSpec = spring()
                    ).value
                )
                .background(Color.Blue, CircleShape)
        )
        
        Button(onClick = { isExpanded = !isExpanded }) {
            Text("展开/收起")
        }
    }
}

实践技巧

条件语句和动画的最佳实践。

  • Name
    代码优化
    Type
    optimization
    Description
    • 提取条件逻辑
    • 使用remember
    • 避免复杂嵌套
    • 合理使用Box
  • Name
    性能考虑
    Type
    performance
    Description
    • 减少状态变化
    • 优化动画性能
    • 条件判断缓存
    • 避免频繁重组

最佳实践示例

@Composable
fun OptimizedView() {
    var currentState by remember { mutableStateOf(0) }
    
    @Composable
    fun StateView() {
        AnimatedVisibility(
            visible = true,
            enter = when (currentState) {
                0 -> scaleIn()
                1 -> slideInHorizontally()
                else -> fadeIn()
            }
        ) {
            Text(
                text = when (currentState) {
                    0 -> "状态A"
                    1 -> "状态B"
                    else -> "状态C"
                }
            )
        }
    }
    
    Column {
        StateView()
        
        Button(
            onClick = { 
                currentState = (currentState + 1) % 3 
            }
        ) {
            Text("切换状态")
        }
    }
}

这篇文章对你有用吗?