Android实现一个简单带动画的展开收起功能

 更新时间:2023年08月31日 09:50:31   作者:似曾相识2022  
今天给大家带来一个展开和收起的简单效果,如果只是代码中简单设置显示或隐藏,熟悉安卓系统的朋友都知道,那一定是闪现,所以笔者结合了动画,使得体验效果瞬间提升一个档次,感兴趣的小伙伴可以自己动手试一试

今天给大家带来一个展开和收起的简单效果。如果只是代码中简单设置显示或隐藏,熟悉安卓系统的朋友都知道,那一定是闪现。所以笔者结合了动画,使得体验效果瞬间提升一个档次。话不多说,直接上效果:

首先观察图中效果,视图有展开和折叠两种状态,右侧图标和文字会跟随这个状态改变。那么其中就有折叠的高度和展开的高度需要我们记录。折叠高度是固定的,展开高度需要动态获取。需要注意的是不能直接通过视图直接获取高度,因为视图的绘制和Activity的生命周期是不同步的,这里直接用简单的post方式获取到绘制完成的总高度。

lin?.post {
    val h = lin!!.height
    hight = if (h > 0) h else baseHight
    if (h > 0 && ivTop?.visibility == View.GONE) {
        ivTop?.visibility = View.VISIBLE
    }
}

接下来就是动画的使用和动态控制视图的高度了。这里需要用到属性动画,由于我们要控制的视图不止一个,所以还是使用ValueAnimator方便点。通过addUpdateListener添加监听后,animation.animatedValue就是我们需要的当前值。在此处不停将当前高度赋值给视图,并且图标也根据这个值进行等比例的旋转以到达到视图不停更新。

//根据展开、关闭状态传入对应高度
val animator = ValueAnimator.ofInt(
    if (isExpand) hight - baseHight else 0,
    if (isExpand) 0 else hight - baseHight
)
animator.addUpdateListener { animation ->
    val params = lin?.layoutParams
    params?.height = if ((animation.animatedValue as Int) < baseHight) baseHight else (animation.animatedValue as Int) //当高度小于基础高度时 给与基础高度
    lin?.layoutParams = params//拿到当前高度
    //图标旋转
    ivTop?.rotation = (animation.animatedValue as Int) * 180f / (hight - baseHight)
}
animator.duration = 500
animator.start()
isExpand = !isExpand
tvExpand?.text = if (isExpand) "关闭" else "展开"

好了,一个简单的展开收起功能就实现了,希望对大家有所帮助。

到此这篇关于Android实现一个简单带动画的展开收起功能的文章就介绍到这了,更多相关Android展开收起功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android学习笔记之ListView复用机制详解

    Android学习笔记之ListView复用机制详解

    本篇文章主要介绍了Android学习笔记之ListView复用机制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Flutter应用集成极光推送的实现示例

    Flutter应用集成极光推送的实现示例

    这篇文章主要介绍了Flutter应用集成极光推送的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • 详解androidstudio项目上传到github方法以及步骤

    详解androidstudio项目上传到github方法以及步骤

    在使用studio开发的项目过程中有时候我们想将项目发布到github上,studio其实是自带这种功能的,那么如何使用呢,下面我们就一起来了解一下
    2019-01-01
  • Android与JS相互调用的方法

    Android与JS相互调用的方法

    这篇文章主要介绍了Android与JS相互通信的方法,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-04-04
  • Android开发实现应用层面屏蔽状态栏的方法小结

    Android开发实现应用层面屏蔽状态栏的方法小结

    这篇文章主要介绍了Android开发实现应用层面屏蔽状态栏的方法,结合实例形式分析了Android屏蔽状态栏的相关函数调用、权限控制及函数重写等相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • Android常用的AlertDialog对话框及自定义对话框

    Android常用的AlertDialog对话框及自定义对话框

    本文主要介绍了android常用的AlertDialog对话框及自定义对话框的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Android Bitmap的截取及状态栏的隐藏和显示功能

    Android Bitmap的截取及状态栏的隐藏和显示功能

    Bitmap是Android系统中的图像处理中最重要类之一。Bitmap可以获取图像文件信息,对图像进行剪切、旋转、缩放,压缩等操作,并可以以指定格式保存图像文件。这篇文章主要介绍了Android Bitmap的截取及状态栏的隐藏和显示功能,需要的朋友可以参考下
    2017-11-11
  • Android中使用ShareSDK集成分享功能的实例代码

    Android中使用ShareSDK集成分享功能的实例代码

    下面小编就为大家分享一篇Android中使用ShareSDK集成分享功能的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android异步消息处理机制实现原理详解

    Android异步消息处理机制实现原理详解

    这篇文章主要介绍了Android异步消息处理机制实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 关于Android Webview 设置Cookie问题详解

    关于Android Webview 设置Cookie问题详解

    大家好,本篇文章是关于Android Webview 设置Cookie问题详解,感兴趣的同学可以看看,希望对你起到帮助,有用的话记得收藏,方便下次浏览
    2021-11-11

最新评论