You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Compose中实现剪贴板操作的临时切换图标动画

实现剪贴板操作后的临时图标/颜色切换动画

你可以通过状态管理+LaunchedEffect+Compose动画API来实现这个需求,核心思路是用状态标记当前是否处于"已复制"状态,点击后触发状态变更并延迟重置,同时根据状态切换图标或颜色,配合动画实现平滑过渡。

以下是完整的实现代码:

val clipboardManager: ClipboardManager = LocalClipboardManager.current
// 维护已复制状态,初始为未复制
var isCopied by remember { mutableStateOf(false) }
// 颜色动画:根据状态切换图标颜色
val iconColor by animateColorAsState(
    targetValue = if (isCopied) Color.Green else Color.Gray,
    animationSpec = tween(durationMillis = 300)
)

Icon(
    imageVector = if (isCopied) {
        // 已复制时显示的图标(比如对勾图标)
        ImageVector.vectorResource(id = R.drawable.ic_copied_success)
    } else {
        // 默认的复制图标
        ImageVector.vectorResource(id = R.drawable.ic_copy_track_number)
    },
    contentDescription = if (isCopied) "已复制" else "复制",
    tint = iconColor,
    modifier = Modifier
        .padding(start = 4.dp)
        .size(16.dp)
        .clickable {
            // 执行剪贴板复制操作
            clipboardManager.setText(AnnotatedString(trackNumber))
            // 切换到已复制状态
            isCopied = true
            // 启动延迟任务,2秒后重置状态
            LaunchedEffect(Unit) {
                delay(2000)
                isCopied = false
            }
        }
)

关键部分说明:

  • 状态管理:用mutableStateOf和remember保存isCopied状态,Compose会根据状态变化自动重组UI。
  • 延迟重置:点击后通过LaunchedEffect启动协程,延迟2秒将isCopied改回false,实现临时效果。
  • 平滑动画:使用animateColorAsState实现图标的颜色渐变过渡,如果需要图标切换时的淡入淡出效果,可以用Crossfade组件包裹图标:
Crossfade(targetState = isCopied, animationSpec = tween(300)) { copied ->
    Icon(
        imageVector = if (copied) {
            ImageVector.vectorResource(id = R.drawable.ic_copied_success)
        } else {
            ImageVector.vectorResource(id = R.drawable.ic_copy_track_number)
        },
        contentDescription = if (copied) "已复制" else "复制",
        tint = iconColor
    )
}

这样就能实现点击复制后,图标和颜色临时切换,2秒后自动恢复原状的效果。

内容的提问来源于stack exchange,提问作者Сергей Беляков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:37:16