RecyclerView - 网格布局管理器列的动画更改

2023-11-26

我想要动画化我的变化RecyclerViews GridLayoutManager。我默认在包含 3 列的网格中显示项目列表,用户可以选择显示更多或更少的列。

我想要views in the RecyclerView移动/扩展到他们的新职位,但我不知道如何做到这一点。

我到底想要什么

  • 允许通过展开/收缩触摸手势来缩放网格 => 我知道该怎么做
  • 动画化的变化LayoutManager

有谁知道我如何才能动画化LayoutManager?


这里的灵感来源是 Google Photos 应用程序,即索尼图库应用程序

基本上有两种方法可以采用:

  1. 您可以使用以下命令修改 GridLayoutManager 的 spancount设置跨度计数(int)

  2. 您设置了一个非常高的跨度计数(~100),使用跨度大小查找动态更改每个项目的 spanSize。

    • 我已经用过Gist由Musenkishi提供,对于这个答案提供动画师来动画网格布局变化的变化
    • 我在一个项目中使用了这种方法示例 GitHub 项目实施相同的。
    • Caveats:
      • 我当前使用点击侦听器来不断修改跨度大小查找。这可以更改为 ItemGestureListener 以捕获捏缩放事件并进行相应更改。
      • 您需要确定一种选择跨度计数的方法,以便一行中的所有项目占据整个屏幕宽度(因此您看不到任何空白空间)
      • 您使用延迟的可运行帖子调用notifyItemRangeChanged,因为您无法从bindView/createView等内部调用notifyChanged方法。
      • 更改跨度大小后,您需要通知项目范围更改具有适当的范围,以便当前显示在屏幕上的所有项目都相应地移动。我已经使用了(代码在底部)

这不是一个完整的解决方案,而是一个 2 小时的解决方案。您显然可以改进提到的所有要点:)。 我希望不断更新样本,因为这种观点一直让我着迷。 不要将此视为最终解决方案,而只是实现此方法的一种特定方式。如果您改用 StaggerredLayoutManager,则可以轻松避免项目之间的空白。

public int calculateRange() {
     int start = ((GridLayoutManager)        grv.getLayoutManager()).findFirstVisibleItemPosition();
     int end = ((GridLayoutManager) grv.getLayoutManager()).findLastVisibleItemPosition();
     if (start < 0)
         start = 0;
     if (end < 0)
         end = getItemCount();
     return end - start;
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RecyclerView - 网格布局管理器列的动画更改 的相关文章

  • 如何检测android中的颠倒方向?

    在我的 Android 应用程序中 我有全景图像 并且我使用 TYPE ORIENTATION 传感器根据手机运动旋转该图像 它对于横向和纵向都工作良好 这是旋转逻辑的代码 Override public void onSensorChan
  • 服务在后台运行?

    我正在构建的应用程序的功能之一是记录功能 我通过在服务中启动 MediaRecorder 对象来实现此目的 Intent intent new Intent v getContext RecordService class Messenge
  • 如何使用 (a)smack 在 Android 上保持 XMPP 连接稳定?

    我使用适用于 Android 的 asmack android 7 beem 库 我有一个后台服务正在运行 例如我的应用程序保持活动状态 但 XMPP 连接迟早会在没有任何通知的情况下消失 服务器表示客户端仍然在线 但没有发送或接收数据包
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • Android 上通过 JSCH 的基本 SSH 连接

    作为来自此的用户question https stackoverflow com questions 14323661 simple ssh connect with jsch和这个tutorial http eridem net andr
  • 从Asynctask返回结果

    如果我的 Android 应用程序中有这个后台工作文件 并且它从我的数据库获取数据 我如何将字符串 结果 传递给另一个类 后台工作人员连接到我的服务器 然后使用 php 连接到数据库 public class BackgroundWorke
  • 明文 HTTP 流量...不允许

    我的程序从用户那里获取一个 URL 因此它可以向互联网上的任何网站发出请求 我试图让这成为可能 我查找了有关 Android HTTP Cleartext 错误的所有答案 并做了这个 但它仍然不允许我连接我的测试本地 PHP 服务器 我在这
  • Android Things 文件系统

    我正在 Android 上构建这个应用程序 我希望能够让它访问 U 盘上的媒体文件 甚至树莓派的 SD 卡上的媒体文件 我还不知道我将如何处理这些文件 但我只是想知道它是否可能 如果不是这样也没关系 我还有其他解决方案 但我想我会先从明显的
  • 将 ArrayList 保存在捆绑包 savingInstanceState 中

    ArrayList 是在类级别定义的 这些是我保存的实例方法 Override protected void onSaveInstanceState Bundle outState super onSaveInstanceState out
  • Android 在创建时出现 SQLiteException

    首先我想说我是android新手 所以如果这个问题太愚蠢我很抱歉 我正在为带有两个表的 SQLite 数据库编写一个内容提供程序 表格上是在导航抽屉活动中显示列表 第二个表格是在 ListFragment 中显示 每次启动应用程序时 我都会
  • Android接收通知打开和取消事件

    我从 webService 接收数据以生成自定义通知 我想追踪Intent要知道open 点击 或cancel 滑动 通知上的事件 以报告服务器进行分析 有没有听众onIntentStart or onIntentCanceled 也许是通
  • 将搜索结果更新为 Android 中的 Lazy Adapter

    我有项目列表 想为其实现搜索功能 因此 我有一个带有 addTextChangedListener 的文本框 搜索结果运行良好 但当我尝试将结果设置为 ListView 时 新结果将附加到旧结果中 我正在使用惰性适配器 如何清除适配器中的旧
  • NoClassDefFoundError:com.google.firebase.FirebaseOptions

    我继续得到NoClassDefFoundError在我正在使用的其他测试设备 4 4 2 上 但在我的测试设备 Android 5 1 上运行良好 我尝试了用谷歌搜索的解决方案 但似乎没有任何效果 我正在使用 Firebase 实时数据库
  • EditText 的高度不会扩展到其父级的高度

    我在滚动视图中放置了编辑文本 高度 match parent并期望它的高度等于滚动视图 但事实并非如此 它的高度就像wrap content这意味着如果 EditText 中没有文本 我必须将光标指向要弹出的软键盘的第一 行 我想要的是我可
  • onTouch 给出奇怪的触摸点 Android

    我正在做的事情非常简单 我以前做过 但现在它没有按我的预期运行 无论如何 让我简要解释一下我正在尝试做什么以及我得到了什么 设想 我有一个RelativeLayout其中一个ImageView已放置 现在我设置touchlistener像这
  • 在android中的日期选择器对话框中显示当前日期

    我多次尝试在日期选择器对话框中显示当前日期 但失败了 它显示 1 1 1990 我已经遵循了堆栈溢出的一些答案 但不幸的是这些对我不起作用 谁能解释一下在日期选择器对话框中显示当前日期的代码 谢谢 It may help you publi
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理
  • SambaFileInputStream 和 FileInputStream 有什么不同?

    我需要从 samba 服务器流式传输视频 并且我使用 nanohttpd 在我的项目中创建简单的服务器 当我使用本地文件中的 fileinputstream 时 视频视图可以按设置播放视频 http localhost 8080 publi
  • Android:列“_id”不存在

    我收到这个错误 IllegalArgumentException 列 id 不存在 当使用SimpleCursorAdapter从我的数据库中检索 该表确实有这个 id柱子 注意到这是一个常见问题 我尝试根据网上的一些解决方案来解决它 但它

随机推荐

  • Github推送错误。没有权限

    我只是尝试使用以下命令从 Ubuntu 11 10 创建我的第一个存储库 我正要完成sudo git push u origin master 权限被拒绝 公钥 fatal 远端意外挂断 如何解决这个问题 我也尝试过这个 即 git pus
  • 创建 OpenID 登录小部件

    我需要一个 OpenID 登录小部件 例如 Stackoverflow 上的小部件或ID选择器 该服务已被终止 取而代之的是 RPXnow 这是一项商业服务 制作这些的最好方法是什么 是否有框架或示例实现 谷歌有一个项目叫谷歌身份工具包 G
  • 我们可以获得目录的修改时间和大小(即统计数据)吗?

    我们可以在 php 中获取目录的修改时间和大小 即统计信息 吗 如何 是的 您可以利用stat功能 stat stat path to directory echo Modification time stat mtime will sho
  • 从字符串中提取主题标签。

    如果我有这样的字符串 var comment Mmmm yummy donut at CZ 如何获取字符串变量中存在的哈希标签列表 我尝试使用 JavaScript split 方法 但我必须继续拆分从初始拆分字符串创建的所有字符串 有更简
  • 如何使用 MongoDB 聚合进行通用集合操作(​​并集、交集、差集)

    我遇到过一些特殊目的的集合运算实现 但没有遇到过一般情况 执行集合运算 特别是交集 并集 对称差 的一般情况是什么 在 where 或 map reduce 中使用 javascript 更容易弄清楚这一点 但我想知道如何在聚合中执行此操作
  • StringBuilder/StringBuffer 与“+”运算符

    我正在阅读 更好 更快 更轻的 Java 作者 Bruce Tate 和 Justin Gehtland 并且熟悉敏捷类型团队的可读性要求 例如 Robert Martin 在他的干净编码书中讨论的内容 在我现在所在的团队中 我被明确告知不
  • 如何通过 tweepy 将流式推文保存为 json?

    我已经通过在线课程学习 Python 几个月了 并且希望通过现实世界的迷你项目进一步学习 对于这个项目 我想从 Twitter Streaming API 收集推文并将其存储为 json 格式 尽管您可以选择只保存 status text
  • Laravel 4 中的自定义电子邮件标头

    我似乎无法在 Laravel 4 文档 电子邮件 API 中找到可以向电子邮件添加自定义标头的方法 例如 Mail send emails welcome data function message message gt to email
  • 为什么c++禁止void*的隐式转换?

    在C中 我们可以转换void 到任何其他指针 但C 禁止这样做 int a malloc 4 导致这个错误 invalid conversion from void to int fpermissive C 中是否存在潜在的危险 有c 的例
  • 启用 StrictMode 的 Crashlytics(检测全部)给出“检测到未标记的套接字”

    我尝试过添加Crashlytics到我的应用程序 它已经有StrictMode启用与detectAll 结果是Untagged socket detected use TrafficStats setThreadSocketTag to t
  • IE8 在重定向后打开新窗口时会丢失 cookie

    我使用的是 Internet Explorer 8 beta 2 客户端执行 POSThttp alpha foo 服务器响应重定向到http beta bar 客户端执行 GEThttp beta bar 服务器响应重定向到http be
  • 在 WPF 中对部分透明图像进行着色

    如何在不牺牲性能的情况下对 WPF 中的图像进行着色 使用 MVVM 纯粹的 XAML 解决方案将是理想的 因为修改代码中的位图会导致性能损失以及大量更改的图像 该图像不仅仅是由简单的形状组成 因此不可能使用路径 与 WinForms GD
  • MySQL 的扩展解决方案(复制、集群)

    At the startup我正在工作 我们现在正在考虑数据库的扩展解决方案 对于 MySQL 事情变得有些混乱 至少对我来说 它有MySQL集群 复制 and MySQL集群复制 从版本 5 1 6 开始 这是 MySQL 集群的异步版本
  • \frac{}{} 对我来说用 pylab 不起作用

    我对使用 python 尤其是 numpy 和 matplotlib 相当陌生 运行下面的代码 无需 frac 部分 产生错误 Normalized Distance in Chamber rac x L Expected end of t
  • 无法在 Chrome 中编辑 CSS STYLE 属性(变灰并被阻止)

    我遇到 以前没见过 一些奇怪的问题 当我输入一个网站时 有问题的网站是RunForGithub com 第一次 然后打开 Chrome Inspect 控制台 然后我可以动态修改 css 属性 但是 当我刷新页面 F5 时 我无法再修改它们
  • iPhone发出POST请求,处理cookie

    我希望有人能够阐明以下内容 我认为我正在朝着正确的方向前进 我想使用用户 密码组合登录我的服务器 然后我需要能够判断我是否正确登录 应该删除 cookie 如果是这种情况 我将发出另一个请求 感谢任何帮助 这是我正在使用的代码 NSHTTP
  • Key Vault 返回 401 和访问令牌(MSI PowerShell Function App)

    我正在尝试连接到Keyvault和我的Azure 函数 using 电源外壳 托管服务身份 MSI 已打开 并且在 Keyvault 中我授予了 MSI 获取 和 列表 访问策略 使用下面的脚本我成功获得了访问令牌 但是当我向 Keyvau
  • 我应该使用 CakePHP 2 还是 3 进行开发 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我刚刚开始使用 CakePHP 开发一个软件即服务项目 我可以看到版本 3 仍处于测试阶段 并且我可以看到该项目需要 3 6 个月的时间 我的问题是我应该从版本 2 还是版本 3 beta
  • 如何将具有相同名称和模式但不同目录的文本文件导入数据库?

    我需要将多个具有相同名称和相同架构的txt文件导入到SQL Server 2008数据库中的同一个表中 我遇到的问题是它们都位于不同的目录中 TEST 201304 sample1 txt sample2 txt 201305 sample
  • RecyclerView - 网格布局管理器列的动画更改

    我想要动画化我的变化RecyclerViews GridLayoutManager 我默认在包含 3 列的网格中显示项目列表 用户可以选择显示更多或更少的列 我想要views in the RecyclerView移动 扩展到他们的新职位