带过渡动画的折叠收缩布局ExpandLayout

2023-11-13

ExpandLayout

简介

由于界面View.VISIBLE和View.GONE的动画太生硬,所以写了ExpandLayout类来平滑过渡。
基本思路,动态的设置布局的高度。

  • 核心动画效果代码
    /**
     * 切换动画实现
     */
    private void animateToggle(long animationDuration) {
        ValueAnimator heightAnimation = isExpand ?
                ValueAnimator.ofFloat(0f, viewHeight) : ValueAnimator.ofFloat(viewHeight, 0f);
        heightAnimation.setDuration(animationDuration / 2);
        heightAnimation.setStartDelay(animationDuration / 2);

        heightAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float val = (float) animation.getAnimatedValue();
                setViewHeight(layoutView, (int) val);
            }
        });

        heightAnimation.start();
    }

效果预览

图片

使用

因为ExpandLayout继承RelativeLayout,所以可以在布局内直接包含控件

  • 布局文件中
 <com.seselin.View.ExpandLayout
        android:id="@+id/expandLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFF00"
        android:clickable="true">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="15dp"
            android:text="这里是可收缩布局内部" />

    </com.seselin.View.ExpandLayout>
  • java代码中
    初始状态是否显示,toggleExpand切换折叠/展开状态
    private ExpandLayout mExpandLayout;

    public void initExpandView() {
        mExpandLayout = (ExpandLayout) findViewById(R.id.expandLayout);
        mExpandLayout.initExpand(false);//设定初始化折叠,默认展开
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mExpandLayout.toggleExpand();
            }
        });
    }

项目地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带过渡动画的折叠收缩布局ExpandLayout 的相关文章

  • 如何对这个字符串进行子串化

    我想得到这个字符串的 4 个部分 String string 10 trillion 896 billion 45 million 56873 我需要的4个部分是 10万亿 8960亿 4500万 和 56873 我所做的是删除所有空格 然
  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐

  • c#一个FTP操作封装类FTPHelper

    参考了网上一些代码 作了一些调整优化 using System using System Collections Generic using System Linq using System Text using System Net us
  • Perfmon监控Windows进程性能

    Perfmon简介 Perfmon Performance Monitor 是一款Windows自带的性能监控工具 提供了图表化的系统性能实时监视器 性能日志和警报管理 通过添加性能计数器 Performance Counter 可以实现对
  • Dell电脑插入耳机不能识别

    https blog csdn net weixin 42800268 article details 89418017 utm source app
  • 2020最新微信小程序学习资源汇总,包括文档、视频、系列教程、开源项目、框架!

    利用国庆这段时间收集的一些微信小程序学习资源 希望能够帮助到大家 持续更新 欢迎投稿 开源项目或者文章博客 来源知乎 https zhuanlan zhihu com p 193101814 目录 官网文档 系列教程 视频 开源项目 小程序
  • JavaScript的window.onload事件的理解

    window onload 的作用 window onload 方法用于在网页加载完毕后立刻执行的操作 即当 HTML 文档加载完毕后 立刻执行某个方法 window onload 通常用于 元素 在页面完全载入后 包括图片 css文件等等
  • RKmedia教学(zbar 二维码识别)

    介绍 要想更好的使用 1126 1109 的硬件资源就必须掌握一套媒体框架 此贴会已一个智慧金融的应用场景 介绍一下 RKmedia 的 VI VO RGA 模块以及 zbar 的使用 应用功能 通过 RGB 摄像头识别二维码 代码 git
  • 存储、嵌入式、通信协议-STM32 FMC原理详解

    推荐关注的博主 https blog csdn net as480133937 category 9188655 html https blog csdn net as480133937 category 11691034 html htt
  • vue初识之路由

    目录 前言 使用步骤 vue代码实例 步骤一 引入js文件 步骤二 创建路由实例 步骤三 创建映射关系 步骤四 将路由实例挂载到vue实例 步骤五 使用路由 总结 前言 Vue Router 是 Vue js 官方的路由管理器 它和 Vue
  • Entry模拟对输入的密码进行验证是否符合规范

    需求 1 密码必须不少于6位 2 密码不能包含中文 3 密码不能有特殊字符 4 密码里至少有一个大写字母 效果如图所示 完整代码如下 from tkinter import import re root Tk root title 密码动态
  • 操作系统4-进程,线程,进程控制——lab4内核线程管理,用户进程管理

    大纲一下 最重要的还是要把知识点串起来 知道每一个后知识点概念出现的原因 进程 进程的概念 进程控制块 进程状态 三状态进程模型 挂起进程模型 线程 为什么引入线程 线程的概念 用户线程 内核线程 进程控制 上下文切换 进程创建fork 进
  • spring 使用 jdbcTemplate 查询 MySQL中 timestamp类型数据不准确的问题

    原因 可能是时区设置问题 解决方法 在数据库连接的url中加上时区的设置 如果使用 springboot 在 application properties 文件中添加 spring datasource url jdbc mysql loc
  • 名称解释:Deployment

    简述 Deployment为Pod和ReplicaSet提供了一个声明式定义 declarative 方法 用来替代以前的ReplicationController来方便的管理应用 典型的应用场景包括 定义Deployment来创建Pod和
  • selenium常用定位元素属性详解

    selenium定位元素详解 1 CSS定位表达式 2 XPath定位表达式 3 XPath定位与CSS定位的比较 4 使用ID定位 5 使用class名称定位 1 CSS定位表达式 css 是一种用于发现HTML或XML等文件样式的前端页
  • Jmeter接口测试、性能测试详细讲解+实战教程,堪称经典!

    目录 导读 1 接口简介 2 接口测试简介 3 环境搭建 4 RESTful风格 5 Json说明 6 Jmeter简介 7 Jmeter环境搭建 8 Jmeter使用 8 1 Jmeter发GET请求 8 2线程组 8 2 1 并发执行
  • BIO、NIO和AIO的区别、三种IO的原理与用法

    目录 IO BIO NIO AIO 区别及联系 各自适用场景 使用方式 IO 什么是IO 它是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口 它对于任何计算机系统都非常关键 因而所有 I O 的主体实际上是内置在操作系统中的
  • 【信号与系统】零输入响应和自由响应的区别

    课本内容 以下内容来自郑君里 信号与系统 第三版 上册 p61 1 自由响应和零输入响应都满足齐次方程的解 2 然而 它们的系数完全不同 零输入响应的系数仅由起始储能情况决定 而自由响应的系数要同时依从于起始状态和激励信号 3 自由响应由两
  • 战地一的服务器在哪个文件夹,战地1怎么加入服务器 战地1加入服务器方法

    今天小编给大家带来的是一位玩家分享的 战地1 加入服务器方法介绍 不知道怎么加入的玩家 快跟小编一起来看看吧 战地1的网络对战除去行动模式是自动配对或者跟好友进外 其他对战进入服务器的方式有好多种 我估计还有其他玩家不知道 那我就图文指条明
  • 【JavaScript】Math 对象

    Math 对象 Math 对象是 JS 的内置对象 可以直接使用 console log typeof Math Math object Math abs acos 常用属性 Math PI 圆周率 3 141592653589793 常用
  • ScrollView嵌套RecyclerView滑动冲突相关问题

    出现了滑动冲突问题 主要表现为横向RecyclerView滑动不灵敏 纵向RecyclerView滑动卡顿 scrollview里面放Recyclerview 会导致view不回收 内存压力大 最好使用 Recyclerview通过Item
  • 带过渡动画的折叠收缩布局ExpandLayout

    ExpandLayout 简介 由于界面View VISIBLE和View GONE的动画太生硬 所以写了ExpandLayout类来平滑过渡 基本思路 动态的设置布局的高度 核心动画效果代码 切换动画实现 private void ani