gpt4 book ai didi

android - 在 RecyclerView 的 ItemAnimator 上禁用 onChange 动画

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:11 43 4
gpt4 key购买 nike

我正在使用一个 RecyclerView,它使用 SortedListAdapterCallbackSortedList 中获取数据。我想为 onChange 事件禁用动画,但为 onInserted/onRemoved/onMoved 保留它们。我尝试在 RecyclerView 使用的 DefaultItemAnimator 上调用 setSupportsChangeAnimations(false),但动画仍然出现。如果我调用 setItemAnimator(null) 所有 动画都会按预期成功删除。

我试着查看实现,似乎如果 supportsChangeAnimationstrueRecyclerView 将通过保留旧的 viewHolder 来动画更改事件并将其交叉淡化到新的 viewHolder。我不想要那个。如果 supportsChangeAnimationsfalse,则新旧 viewHolder 将是同一个对象,并且将有一个从 x 到 x 的 onMoved 动画(即没有实际移动)。然而,这意味着该项目将获得恼人的弹跳效果。我也不想要那个,我根本不想要动画。 :(

来自 DefaultItemAnimator.java:

@Override
public boolean animateChange(ViewHolder oldHolder, ViewHolder newHolder,
int fromX, int fromY, int toX, int toY) {
if (oldHolder == newHolder) {
// Don't know how to run change animations when the same view holder is re-used.
// run a move animation to handle position changes.
return animateMove(oldHolder, fromX, fromY, toX, toY);
}
...

有时,当我加载我的列表时,我会异步获取一些数据并更新项目 1-3 次,每次它跳动和闪烁时看起来真的很糟糕。

如何在不编写完全自定义的 ItemAnimator 的情况下有效地完全禁用 onChange 动画?

最佳答案

我参加这个聚会有点晚了,但是使用 androidx.recyclerview:recyclerview:1.1.0 我可以设置更改默认动画师的 changeDuration 到 0 这会有效地禁用动画,同时允许添加/移动/删除动画继续正常运行。无需自定义覆盖 DefaultItemAnimator

示例(在 Kotlin 中):

view.my_recycler_view.itemAnimator?.changeDuration = 0

关于android - 在 RecyclerView 的 ItemAnimator 上禁用 onChange 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35766497/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com