如何将 FAB 转换为弹出菜单?

2024-05-27

根据材料设计指南 https://material.google.com/components/buttons-floating-action-button.html#buttons-floating-action-button-transitions“浮动操作按钮可以转变为包含所有操作的单张材料”。

我想在不使用第三方库的情况下创建以下动画。


首先,您需要将该动画切成小部分。 在这个例子中我可以推断出 3 个步骤:

  1. 点击事件时触发 FAB 上的波纹效果。
  2. 向左平移应用于 FAB。
  3. 应用于卡片的圆形显示动画。

所以你需要创建一个FAB(visible)和一张卡片(invisible)。 FAB 位于其初始位置,卡片位于其最后位置。在触发 FAB 上的涟漪效果(步骤 1)并再次在 FAB 上的移动事件结束时(步骤 2 结束),您只需关闭 FAB 并在卡片上启动 Reveal 动画(步骤 3) 。

要启动循环显示动画,只需调用ViewAnimationUtils.createCircularReveal方法。传递你的卡片视图、X、Y 起始坐标、半径,就是这样!困难肯定是找到每个动画之间的最佳持续时间和开始/结束坐标,以使其尽可能平滑。

如果你愿意的话,你可以在这里看我的帖子https://stackoverflow.com/a/41957295/1053880 https://stackoverflow.com/a/41957295/1053880。我使用圆形显示动画来创建两个工具栏之间的切换。你的代码的某些部分将与我的类似(我最后也恢复了我的动画)。

GitHub 上的示例项目

https://github.com/fbourlieux/android-material-circular_reveal_animation https://github.com/fbourlieux/android-material-circular_reveal_animation

希望这有帮助!

François

有用的链接:

  • 链接1:GitHub 上的 Circular-Reveal-Animation 项目 https://github.com/codepath/android_guides/wiki/Circular-Reveal-Animation
  • Link2:像Whatsapp一样创建圆形显示动画和波纹效果 http://pulse7.net/android/android-create-circular-reveal-animation-and-ripple-effect-like-whatsapp/
  • Link3:简单波纹+揭示+高程教程 http://trickyandroid.com/simple-ripple-reveal-elevation-tutorial/
  • Link4:缩放、平移、旋转动画 https://developer.android.com/guide/topics/graphics/view-animation.html
  • Link5:波纹动画 http://guides.codepath.com/android/ripple-animation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 FAB 转换为弹出菜单? 的相关文章

  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • 在 Android Studio 中,为什么我必须在模拟器中单击“运行应用程序”两次才能启动应用程序?

    在 Android Studio 中 当我按播放按钮在 Android 模拟器上安装并运行应用程序时 大约 5 10 秒后 我在屏幕底部收到一条消息 显示 安装成功 但应用程序实际上并未运行在模拟器上 我必须再次按下播放按钮 这是非常令人沮
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • 尝试将相机切换回前面但出现异常

    尝试将相机切换回前面 但出现异常 找不到 问题请检查并帮助 error 01 27 11 49 00 376 E AndroidRuntime 30767 java lang RuntimeException Unable to start
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL
  • 强制 Listview 不重复使用视图(复选框)

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

随机推荐

  • 寻找一种简单的方法来重新初始化结构

    我有一个名为 CoolStruct 的结构 struct CoolStruct int id uint32 type uint32 subtype String name 我也有这些结构的向量 std vector
  • R 控制台是我的母语,如何将 R 设置为英语?

    我在 Windows 7 上使用 R 显然 R 不知何故发现了我说英语以外的语言的证据 并且顽固地坚持在控制台中以我自己的语言提供输出 由于多种原因 这是不可取的 我希望 R 是英语 什么有效 我能够使用LANGUAGE en作为 R 控制
  • 重命名带有“完整工作表”图表的工作表会导致电子表格重新加载

    Google 表格允许将图表移动到自己的表格中 不过 谷歌脚本似乎无法重命名这些工作表 而不会使电子表格崩溃并强制其重新加载 要明白我的意思 请尝试以下操作 1 创建新的电子表格并在其中放入一些数据 2 使用数据创建任何类型的图表 3 编辑
  • AF网络3问题

    In AFNetworking3 表示我使用的 SSL 证书无效验证证书链 false 但现在看来该字段已被删除 我无法向我的服务器发出请求 这是请求类 import UIKit import AFNetworking class Clie
  • Android OpenGL ES 支持无处不在?

    我需要了解如果我选择在 OpenGL 而不是 android graphics 中的 android 原生 2D 图形 API 进行绘图 我会损失多少潜在安装量 android 文档似乎暗示 OpenGL ES API 基本上在所有手机上都
  • 如何从字符串调用并执行运算符?

    例如 var s 3 3 s replace d g function all n1 operator n2 r new Number n1 new Number n2 return r 注意 不使用eval 变量运算符可以吗 https
  • 如何通过其偏移量访问私有数据私有成员?

    我正在尝试按偏移量访问和修改类的私有数据成员 AFAIK 首先是计算偏移量 然后通过偏移量访问成员 这是我的代码 class Test public int a int b private int c Test test cout lt l
  • 如何在 Azure Functions 3.x PowerShell 7 中调用 Azure PowerShell 模块命令?

    我需要运行 Azure PowerShell 模块命令 https learn microsoft com en us powershell azure install az ps view azps 5 2 0 https learn m
  • Python groupby 无法按预期工作[重复]

    这个问题在这里已经有答案了 我正在尝试读取一个 Excel 电子表格 其中包含以下格式的一些列 column1 column1 AccountName column1 SomeOtherFeature column2 blabla colu
  • Active Adblock Plus 在 Chrome JS 控制台中显示奇怪的错误

    我使用 Chrome 浏览的每个页面都会在控制台中显示此错误 扩展 uncaught exception handler 8 事件处理程序中出现错误 未知 SyntaxError 无法在 CSSStyleSheet 上执行 insertRu
  • 当函数定义为无参数时,为什么我可以调用带参数的函数?

    再会 我偶然发现了一些我在 JavaScript 领域从未见过的东西 但我想对于更了解该语言的人来说这是很容易解释的 下面我有以下函数 代码取自书籍 JavaScript Ninja 的秘密 function log try console
  • 查找数组中的重叠数据

    我们正在编写一个 C 应用程序 它将有助于删除不必要的数据重复器 只有在以下情况下才可以移除中继器 all它接收到的数据被其他中继器接收 我们第一步需要做的事情解释如下 例如 我有 int 数组的集合 A 1 2 3 4 5 b 2 4 6
  • 有没有免费的在线 Maven 存储库?

    有没有免费的在线私人maven2或maven3存储库 这样该团队就可以从各个区域访问存储库 如果您使用 github 则可以使用私有 github 项目作为您的 Maven 存储库 这里有关于如何将 Maven 工件发布到 github 的
  • 在 Windows 上安装 RMagick

    我对此进行了研究 并且在我的一台计算机上花了几个小时 大约三周前 我在我的台式计算机上安装了 RMagick 它相当复杂 我不记得我采取的具体步骤 我真的很沮丧 我已将 ImageMagick 安装到我的计算机上的目录 C ImageMag
  • 在屏幕外绘制 uiview

    我想创建一个 UIView 它在调用 ViewDidLoad 时位于屏幕外 但一旦调用某个函数 我就会将其动画显示到屏幕上 用于对 UIView 进行动画处理的代码很好 但我似乎无法从屏幕外绘制 UIView 我已将故事板中的 UIView
  • 使用用户名进行 Java LDAP 身份验证

    好吧 这让我发疯 我正在尝试使用 Java 创建 LDAP 身份验证 如果我在 SECURITY PRINCIPAL 中使用我的名字和姓氏 一切都很好 这是我的代码 try Hashtable
  • 具有列顺序的响应式多列列表

    我正在尝试创建一个有序的多列列表 但正在努力解决 CSS 网格布局规则 期望的结果应该是响应式的 在小屏幕上有 2 个网格列 在较大的屏幕上最多有 4 个网格列 同时保持列顺序 而不是像这样排序 1 2 3 4 5 6 7 8 9 10 1
  • 活动片段已清除索引:-1 是什么意思以及如何修复它?

    我有一个带有自定义滑动菜单的活动 用于类似选项卡的界面 由于某种原因 我的一个 且只有一个 片段出现此错误 我似乎找不到它在做什么 这是堆栈跟踪 E FragmentManager 13024 Failure saving state ac
  • 如何修改 Elasticsearch 文档的 _source 字段

    问题 有没有办法从文档的 source 中清除 html html 的剥离可以是周期性的 触发的 或者理想情况下是在索引时即时进行的 我将数据输入到elasticsearch中 并针对分析器进行索引 该分析器在索引之前剥离不需要的htmls
  • 如何将 FAB 转换为弹出菜单?

    根据材料设计指南 https material google com components buttons floating action button html buttons floating action button transit