如何为Recycler View动画更改布局管理器?

17

我正在使用带有两个不同布局的回收视图,即LinearLayoutManager和GridLayoutManager。

我想在从一个布局管理器切换到另一个管理器时对项目进行动画处理。有没有一种方法可以实现这种效果?

我脑海中浮现出的方法是重写setLayoutManger方法,并使用fromLayoutManager捕获项目的BEFORE状态,使用toLayoutManager计算出项目的AFTER状态,并将这些项目动画放置到其位置上。

我还没有深入研究代码,所以是否有人能告诉我是否可以实现这种方法,或者是否有更好的方法来实现这一点?


你有这方面的任何更新吗? - feisal
1个回答

10

我通过将下面两个方法添加到我的适配器中来解决了这个问题。我调用notifyRemoveEach(),更改布局管理器,然后调用notifyAddEach()。根据您的ItemAnimator上指定的持续时间,项目会简短地进行出入动画。

    public void notifyRemoveEach() {
        for (int i = 0; i < items.size(); i++) {
            notifyItemRemoved(i);
        }
    }

    public void notifyAddEach() {
        for (int i = 0; i < items.size(); i++) {
            notifyItemInserted(i);
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接