广告
返回顶部
首页 > 资讯 > 精选 >如何通过Jetpack Compose实现双击点赞动画效果
  • 408
分享到

如何通过Jetpack Compose实现双击点赞动画效果

2023-06-28 23:06:58 408人浏览 八月长安
摘要

这篇文章主要介绍如何通过Jetpack Compose实现双击点赞动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现步骤先红色画个爱心Icon(    Ico

这篇文章主要介绍如何通过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可以应用于

    • 缩放(scaleXscaleY

    • 旋转(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实现双击点赞动画效果

    以上是“如何通过Jetpack Compose实现双击点赞动画效果”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: 如何通过Jetpack Compose实现双击点赞动画效果

    本文链接: https://www.lsjlt.com/news/321144.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 如何通过Jetpack Compose实现双击点赞动画效果
      这篇文章主要介绍如何通过Jetpack Compose实现双击点赞动画效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现步骤先红色画个爱心Icon(    Ico...
      99+
      2023-06-28
    • 通过JetpackCompose实现双击点赞动画效果
      目录实现步骤先红色画个爱心点击事件加动画完整代码效果图实现步骤 先红色画个爱心 Icon( Icons.Filled.Favorite, "爱心", Modi...
      99+
      2022-11-13
    • 利用Android实现一种点赞动画效果的全过程
      目录前言点击后的缩放效果拇指的散开效果示例总结前言 最近有个需求,需要仿照公司的H5实现一个游戏助手,其中一个点赞的按钮有动画效果,如下图: 分析一下这个动画,点击按钮后,拇指首先...
      99+
      2022-12-08
      android 点赞动画 android点赞效果 android点击动画
    • Android如何实现带动画效果的可点击展开TextView
      这篇文章将为大家详细讲解有关Android如何实现带动画效果的可点击展开TextView,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图: 收起(默认)效果:点击展开后的效果:源码: 布局:<x...
      99+
      2023-05-30
      android textview
    • js如何通过Date对象实现倒计时动画效果
      小编给大家分享一下js如何通过Date对象实现倒计时动画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!js通过Date对象实...
      99+
      2022-10-19
    • 如何通过css动画实现一个表格滚动轮播效果
      这篇文章主要介绍了如何通过css动画实现一个表格滚动轮播效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。css动画的一个应用,与此前的css走马灯同样的内容。只是一次不同的...
      99+
      2023-06-08
    • Vue中如何实现animate过渡动画效果
      这篇文章主要为大家展示了“Vue中如何实现animate过渡动画效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue中如何实现animate过渡动画效果”这...
      99+
      2022-10-19
    • vue元素如何实现动画过渡效果
      这篇文章将为大家详细讲解有关vue元素如何实现动画过渡效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1 在 vue 中,使用 <transition> 标...
      99+
      2022-10-19
    • 如何通过纯CSS实现漂浮动画效果的方法和技巧
      如何通过纯CSS实现漂浮动画效果的方法和技巧在现代网页设计中,动画效果已成为吸引用户眼球的重要元素之一。而其中一种常见的动画效果就是漂浮效果,它可以给网页增加一种动感和活力,使得用户体验更加丰富和有趣。本文将介绍如何通过纯CSS实现漂浮动画...
      99+
      2023-10-25
      动画效果 CSS实现 漂浮
    • Android如何实现直播app送礼物连击动画效果
      这篇文章将为大家详细讲解有关Android如何实现直播app送礼物连击动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在做公司的直播项目,需要实现一个观看端连击送礼物的控件:直接上代码:publ...
      99+
      2023-05-31
      android
    • 如何使用css3实现转换过渡和动画效果
      这篇文章主要介绍了如何使用css3实现转换过渡和动画效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么要用css动画替换js动画  导致JavaScript效...
      99+
      2023-06-08
    • 如何通过纯CSS实现网页的平滑滚动效果
      在网页设计中,平滑滚动效果可以为用户提供良好的浏览体验,使页面切换更加流畅。而在纯CSS中实现平滑滚动效果可以避免使用JavaScript,进一步优化页面加载速度和性能。本文将详细介绍如何使用纯CSS实现网页的平滑滚动效果,并提供具体的代码...
      99+
      2023-10-21
      平滑滚动 纯CSS 网页效果
    • js如何实现做通讯录的索引滑动显示效果和滑动显示锚点效果
      小编给大家分享一下js如何实现做通讯录的索引滑动显示效果和滑动显示锚点效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!第一个是...
      99+
      2022-10-19
    • Angular.js如何通过自定义指令directive实现滑块滑动效果
      这篇文章主要介绍Angular.js如何通过自定义指令directive实现滑块滑动效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!方法如下1.下面是我html部分代码,detai...
      99+
      2022-10-19
    • 如何通过纯CSS实现网页的平滑滚动背景效果
      如何通过纯CSS实现网页的平滑滚动背景效果背景是网页设计中非常重要的一部分,可以增强页面的视觉效果和用户体验。传统的网页背景通常是静态的,但是通过使用纯CSS技术,我们可以实现一种平滑滚动背景效果,从而为网页添加更加动感和生动的视觉效果。在...
      99+
      2023-10-24
      平滑 滚动 纯CSS 背景效果
    • css如何实现鼠标放上去时图片过渡转换动画效果
      这篇“css如何实现鼠标放上去时图片过渡转换动画效果”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“css如何实现鼠标放上去时图片过渡转换动画效果”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望...
      99+
      2023-06-08
    • 如何通过纯CSS实现网页的平滑滚动背景图效果
      在现代网页设计中,背景图的运用可以为网页增添更多的美感和活力。而通过CSS实现平滑滚动背景图效果,则可以使整个页面更加流畅和吸引人。本文将详细介绍如何通过纯CSS实现这一效果,并提供具体的代码示例。首先,我们需要准备一张背景图,并将其添加到...
      99+
      2023-10-21
      平滑滚动 纯CSS 背景图效果
    • 如何通过纯CSS实现网页的平滑滚动背景镂空效果
      随着互联网技术的不断发展,网页的设计也日趋多样化和复杂化。一个好看的网页,往往需要注重细节和创新。其中,平滑滚动背景镂空效果是近年来越来越受欢迎的设计元素之一。这种效果可以使网页看起来更加生动、有趣,并且能够引起用户的注意和兴趣。在本文中,...
      99+
      2023-10-21
      CSS 平滑滚动 镂空效果
    • 如何通过纯CSS实现网页的平滑滚动背景渐变效果
      如何通过纯CSS实现网页的平滑滚动背景渐变效果一、引言在网页设计中,背景渐变效果可以为网站增加美感和动态感。而平滑滚动背景渐变则可以使网页更加吸引人,给用户带来舒适的浏览体验。本文将介绍如何通过纯CSS实现网页的平滑滚动背景渐变效果,并提供...
      99+
      2023-10-25
      CSS 平滑滚动 背景渐变
    • 微信小程序如何实现slideUp、slideDown滑动效果及点击空白隐藏功能
      这篇文章给大家分享的是有关微信小程序如何实现slideUp、slideDown滑动效果及点击空白隐藏功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。怎样实现jq中的slideU...
      99+
      2022-10-19
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作