Как оживить изменение менеджера компоновки просмотра ресайклера
Я использую просмотр 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);
}
}