如何删除 android 中的 GridLayout 跨度计数更改动画?
How to remove GridLayout span count change animation in android?
我有一个 RecyclerView 和相关的适配器 class。我更改了 GridLayoutManager 的跨度计数。
fun switchLayout() {
if (layoutManager?.spanCount == 1) {
layoutManager.spanCount = 5
} else {
layoutManager?.spanCount = 1
}
notifyItemRangeChanged(0, itemCount)
}
然后出现如下动画
这很有趣,但我不需要它。那么,如何删除此动画?
而不是 notifyItemRangeChanged(0, itemCount)
只需使用 notifyDataSetChanged()
- 第一个是引起动画,第二个是从头开始强制重绘整个网格(不考虑项目的先前位置,因此移动动画)
禁用所有动画(添加新项目、删除、更改 positions/order 2 或更多)你可以使用 recyclerView.setItemAnimator(null)
(如问题指出的评论)。那么您仍然可以使用所有 notifyItem...
方法,更改不会被动画化。
或者您也可以定义自己的自定义 ItemAnimator
并禁用一些动画。例如在您的情况下:animateChange
应包含行 dispatchAnimationFinished(viewHolder)
,然后是 return false
。在 HERE some nice template to use. your class may extends
DefaultItemAnimator
中,然后你可以只覆盖你想要 disable/change
的 methods/animations
我有一个 RecyclerView 和相关的适配器 class。我更改了 GridLayoutManager 的跨度计数。
fun switchLayout() {
if (layoutManager?.spanCount == 1) {
layoutManager.spanCount = 5
} else {
layoutManager?.spanCount = 1
}
notifyItemRangeChanged(0, itemCount)
}
然后出现如下动画
这很有趣,但我不需要它。那么,如何删除此动画?
而不是 notifyItemRangeChanged(0, itemCount)
只需使用 notifyDataSetChanged()
- 第一个是引起动画,第二个是从头开始强制重绘整个网格(不考虑项目的先前位置,因此移动动画)
禁用所有动画(添加新项目、删除、更改 positions/order 2 或更多)你可以使用 recyclerView.setItemAnimator(null)
(如问题指出的评论)。那么您仍然可以使用所有 notifyItem...
方法,更改不会被动画化。
或者您也可以定义自己的自定义 ItemAnimator
并禁用一些动画。例如在您的情况下:animateChange
应包含行 dispatchAnimationFinished(viewHolder)
,然后是 return false
。在 HERE some nice template to use. your class may extends
DefaultItemAnimator
中,然后你可以只覆盖你想要 disable/change