如何在android中删除GridLayout跨度计数更改动画?
Posted
技术标签:
【中文标题】如何在android中删除GridLayout跨度计数更改动画?【英文标题】:How to remove GridLayout span count change animation in android? 【发布时间】:2021-08-10 08:29:15 【问题描述】:我有一个 RecyclerView 和相关的 Adapter 类。我更改了 GridLayoutManager 的跨度计数。
fun switchLayout()
if (layoutManager?.spanCount == 1)
layoutManager.spanCount = 5
else
layoutManager?.spanCount = 1
notifyItemRangeChanged(0, itemCount)
然后出现一些动画,如下所示
这很有趣,但我不需要它。那么,如何删除此动画?
【问题讨论】:
您尝试过:recyclerView.setItemAnimator(null);
吗?
【参考方案1】:
而不是notifyItemRangeChanged(0, itemCount)
,只需使用notifyDataSetChanged()
- 第一个会导致动画,第二个将从头开始强制重绘整个网格(不考虑项目的先前位置,从而移动动画)
要禁用所有动画(添加新项目、删除、更改 2 个或更多的位置/顺序),您可以使用 recyclerView.setItemAnimator(null)
(如问题下的评论指出)。那么你仍然可以使用所有notifyItem...
方法,更改不会被动画化。
或者你也可以定义自己的自定义ItemAnimator
禁用一些动画。例如在您的情况下:animateChange
应包含行 dispatchAnimationFinished(viewHolder)
,然后是 return false
。在HERE 中使用一些不错的模板。你的班级可以extends
DefaultItemAnimator
然后你可以只覆盖你想要禁用/更改的方法/动画
【讨论】:
以上是关于如何在android中删除GridLayout跨度计数更改动画?的主要内容,如果未能解决你的问题,请参考以下文章
使用gridlayout布局后,因某些原因又删除,并整理文件夹结构时,Unable to resolve target 'android-7'