如何通过Jetpack Compose实现双击点赞动画效果
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍如何通过Jetpack Compose实现双击点赞动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现步骤先红色画个爱心Icon( Icons.Fi
千家信息网最后更新 2026年10月31日如何通过Jetpack Compose实现双击点赞动画效果
这篇文章主要介绍如何通过Jetpack Compose实现双击点赞动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
实现步骤
先红色画个爱心
Icon( Icons.Filled.Favorite, "爱心", Modifier .align(Alignment.Center) tint = Color.Red)
点击事件加动画
双击监听
.pointerInput(Unit) { detectTapGestures( onDoubleTap = { ... } )}#### **API 介绍**| API名称 | 作用 || --- | --- || detectTapGestures | 监听点击手势 |> 与 Clickable Modifier 不同的是,detectTapGestures 可以监听更多的点击事件。作为手机监听的基础 API,必然不会存在 Clickable Modifier 所拓展的涟漪效果detectTapGestures 提供了四个可选参数- onDoubleTap (可选):双击时回调- onLongPress (可选):长按时回调- onPress (可选):按下时回调- onTap (可选):轻触时回调我们用到的就是`onDoubleTap`用枚举定义三个变量 开始、显示和消失
enum class LikedStates { Initial, Liked, Disappeared}remember保持数据状态,mutableStateOf监听状态变化
var transitionState by remember { mutableStateOf(MutableTransitionState(LikedStates.Disappeared))}MutableTransitionState包含两个字段:currentState和targetState。currentState初始化为提供的initialState,并且只能通过转换进行变异。targetState也初始化为initialState。可以对其进行变异,以改变使用updateTransition使用MutableTransitionState创建的过渡动画的过程。currentState和targetState都由状态对象支持。
判断拦截数据变化过程,用于实现对应的动画
if (transitionState.currentState == LikedStates.Initial) { transitionState.targetState = LikedStates.Liked} else if (transitionState.currentState == LikedStates.Liked) { transitionState.targetState = LikedStates.Disappeared}开始显示的过度动画
val transition = updateTransition(transitionState = transitionState, label = null)val alpha by transition.animateFloat( transitionSpec = { ... }) { if (it == LikedStates.Liked) 1f else 0f}我们要实现有弹性的放大动画,所以利用graphicsLayer实现缩放
graphicsLayer可以应用于
缩放(
scaleX、scaleY)旋转(rotationX、rotationY、rotationZ)
不透明度(
alpha)阴影(shadowElevation、shape)
剪裁(clip、shape)
定义scale,XY
1 :1放大所以定义一个就行
val scale by transition.animateFloat( transitionSpec = { .... }) { ...}创建浮动动画作为给定变换的一部分targetValueByState用作从目标状态到此动画的目标值的映射
最后在定义三种状态里吗设置对应的参数
when (it) { LikedStates.Initial -> 0f LikedStates.Liked -> 4f LikedStates.Disappeared -> 2f }完整代码
@Suppress("TransitionPropertiesLabel")@Composable fun DoubleTapToLike() { var transitionState by remember { mutableStateOf(MutableTransitionState(LikedStates.Disappeared)) } Box( Modifier .fillMaxSize() .pointerInput(Unit) { detectTapGestures( onDoubleTap = { transitionState = MutableTransitionState(LikedStates.Initial) } ) } ) { if (transitionState.currentState == LikedStates.Initial) { transitionState.targetState = LikedStates.Liked } else if (transitionState.currentState == LikedStates.Liked) { transitionState.targetState = LikedStates.Disappeared } val transition = updateTransition(transitionState = transitionState, label = null) val alpha by transition.animateFloat( transitionSpec = { when { LikedStates.Initial isTransitioningTo LikedStates.Liked -> keyframes { durationMillis = 500 0f at 0 0.5f at 100 1f at 225 } LikedStates.Liked isTransitioningTo LikedStates.Disappeared -> tween(durationMillis = 200) else -> snap() } } ) { if (it == LikedStates.Liked) 1f else 0f } val scale by transition.animateFloat( transitionSpec = { when { LikedStates.Initial isTransitioningTo LikedStates.Liked -> spring(dampingRatio = Spring.DampingRatioHighBouncy) LikedStates.Liked isTransitioningTo LikedStates.Disappeared -> tween(200) else -> snap() } } ) { when (it) { LikedStates.Initial -> 0f LikedStates.Liked -> 4f LikedStates.Disappeared -> 2f } } Icon( Icons.Filled.Favorite, "点赞", Modifier .align(Alignment.Center) .graphicsLayer( alpha = alpha, scaleX = scale, scaleY = scale ), tint = Color.Red ) }}enum class LikedStates { Initial, Liked, Disappeared}效果图
以上是"如何通过Jetpack Compose实现双击点赞动画效果"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
动画
状态
监听
效果
事件
内容
参数
变异
数据
更多
爱心
目标
篇文章
过程
变化
不同
三个
两个
代码
价值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手冲咖啡和咖啡机区别
喔噻互联网科技有限公司
互联网科技公司的优势
科技与互联网
金融科技还是互联网
盈实互联网科技
腾讯科技 互联网女皇
科技创新互联网企业
润盈互联网科技
互联网科技有限公司 翻译
互联网科技公司的市场部门
开启互联网科技时代小说
全球顶尖互联网科技公司
荆州市昕露互联网络科技有限公司
互联网与医疗科技
米聚互联网科技南京有限公司排面
工业互联网山东科技大学
互联网科技数字货币
国产互联网科技公司
互联网科技收购价值
伟宏互联网科技
亿人帮互联网科技有限公司
今日互联网科技
互联网为科技
亿策互联网科技
奔汉互联网科技
滨湖区互联网智能科技产品供应
崇明区互联网教育科技诚信经营
唯美互联网科技
互联网的科技体现在哪里