我想要动画化我的变化RecyclerView
s GridLayoutManager
。我默认在包含 3 列的网格中显示项目列表,用户可以选择显示更多或更少的列。
我想要views
in the RecyclerView
移动/扩展到他们的新职位,但我不知道如何做到这一点。
我到底想要什么
- 允许通过展开/收缩触摸手势来缩放网格 => 我知道该怎么做
- 动画化的变化
LayoutManager
有谁知道我如何才能动画化LayoutManager
?
这里的灵感来源是 Google Photos 应用程序,即索尼图库应用程序
基本上有两种方法可以采用:
您可以使用以下命令修改 GridLayoutManager 的 spancount设置跨度计数(int)
-
您设置了一个非常高的跨度计数(~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(使用前将#替换为@)