Как оживить изменение менеджера компоновки просмотра ресайклера

Я использую просмотр recycler с двумя разными менеджерами макета макета, который является LinearLayoutManager и GridLayoutManager.

Я хотел бы анимировать элементы при переключении с одного менеджера макета на другого менеджера. Есть ли способ достичь этого эффекта?

Подходящий всплывает в моей голове, чтобы переопределить метод setLayoutManger и захватить состояния BEFORE элементов с помощью метода fromLayoutManager и рассчитать состояния AFTER элементов, используя toLayoutManager, и оживить эти элементы на месте.

Я не очень глубоко разбираюсь в кодах, так что кто-нибудь может сказать мне, что такой подход можно достичь или лучше достичь этого?

Ответы

Ответ 1

Я решил это, добавив два метода ниже к моему адаптеру. Я вызываю 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);
        }
    }