• 作者:老汪软件技巧
  • 发表时间:2024-08-31 21:02
  • 浏览量:

背景

之前在B站上看见一个视频是使用swiftui实现的霓虹效果的文字,后来我用compose实现没有思路,然后我就问了问gpt,它给了我答案。

1.普通霓虹文字

代码很简单,BasicText里面的shadow设置一下。

制作趣动视频__趣味动画怎么做

@Composable
fun NeonText(text: String = "UIVERSE", color: Color = Color(0xFF00FF9A)) {
    BasicText(
        text = text, // The glowing text
        style = TextStyle(
            color = color, // Neon green
            fontSize = 48.sp,
            shadow = Shadow(
                color = color, // The glow color
                blurRadius = 8f
            )
        )
    )
}

2.动态霓虹文字

不能动的效果怎么会出现在我的文章里呢,把这个text绑定到textfield上,让文字动起来。。。但是如果只有文字显得呆板,把输入的光标加上,让效果更好看。

代码如下,不算很复杂:

@Composable
fun GlowingTextWithCursor() {
    // Infinite transition for blinking cursor
    var text by remember { mutableStateOf("") }
    val infiniteTransition = rememberInfiniteTransition()
    val alpha by infiniteTransition.animateFloat(
        initialValue = 1f,
        targetValue = 0f,
        animationSpec = infiniteRepeatable(
            animation = tween(500), // Time for blinking
            repeatMode = RepeatMode.Reverse
        )
    )
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(Color(0xFF1A1A1A)), // Background color
        contentAlignment = Alignment.Center
    ) {
        Row(
            verticalAlignment = Alignment.CenterVertically
        ) {
            BasicText(
                text = text, 
                style = TextStyle(
                    color = Color(0xFF00FF9A), // Neon green
                    fontSize = 48.sp,
                    shadow = Shadow(
                        color = Color(0xFF00FF9A), // The glow color
                        blurRadius = 8f
                    )
                )
            )
            Spacer(modifier = Modifier.width(4.dp)) // Space between text and cursor
            Box(
                modifier = Modifier
                    .height(48.dp)
                    .width(4.dp)
                    .background(Color(0xFF00FF9A).copy(alpha = alpha)) // Blinking cursor
            )
        }
        TextField(
            text, {
                text = it
            },
            modifier = Modifier
                .padding(top = 120.dp)
        )
    }
}