Как я могу анимировать Recycler-View при изменении менеджера компоновки

В дизайне моего приложения мне нужно изменить менеджер компоновки recycler-view с линейно-горизонтального на менеджер компоновки сетки.

Мне нужно сделать этот переход плавным. Может ли кто-нибудь предложить мне, как я могу сделать это возможным.


comment
Вы нашли решение ?   -  person Hala.M    schedule 24.09.2019
comment
нет, я все еще ничего не нашел @Hala.M   -  person Pavan Varma    schedule 27.09.2019
comment
Кто-то пытался использовать только Grid и установить spanCount=1, когда вам нужно показать как список? Будет ли Grid оживлять себя в этом случае?   -  person reel    schedule 23.05.2020


Ответы (1)


Чтобы анимировать изменение менеджера компоновки, вам нужно будет применить анимацию компоновки к RecyclerView, и для этого вам необходимо выполнить следующие шаги:

1) Создайте файл анимации элементов, чтобы анимировать появление элементов.

item_animation.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime">

    <translate
        android:fromYDelta="-30%"
        android:toYDelta="0%"
        android:interpolator="@android:anim/decelerate_interpolator" />

    <alpha android:fromAlpha="0"
        android:toAlpha="1"
        android:interpolator="@android:anim/decelerate_interpolator" />

    <scale
        android:fromXScale="115%"
        android:fromYScale="115%"
        android:toXScale="100%"
        android:toYScale="100%"
        android:pivotX="50%"
        android:pivotY="50%"
        android:interpolator="@android:anim/decelerate_interpolator"
        />

</set>

2) Затем создайте XML в папке anim для анимации макета и примените его к анимации элемента, как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/item_animation"
    android:animationOrder="normal"
    android:delay="15%" />

3) Теперь, когда вы измените менеджер компоновки (скажем, с сетки на линейную компоновку), просто установите эту анимацию на RecyclerView, чтобы анимировать появление элементов RecyclerView:

   private void runLayoutAnimation(final RecyclerView recyclerView) {
            final Context context = recyclerView.getContext();
            final LayoutAnimationController controller =
                    AnimationUtils.loadLayoutAnimation(context, R.anim.layout_animation);

            recyclerView.setLayoutAnimation(controller);
            recyclerView.getAdapter().notifyDataSetChanged();
            recyclerView.scheduleLayoutAnimation();
}
            // Changing the layout manager followed by applying the animation
            recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
            runLayoutAnimation(recyclerView);
person Sudhanshu Vohra    schedule 15.07.2018
comment
Спасибо за ваш ответ, но отправленный вами код работает как обычная анимация. Вещь, которую я хотел, - это плавно анимировать элементы представления ресайклера в их новых позициях, как переходы между общими элементами. - person Pavan Varma; 15.07.2018
comment
Хорошо, проверим это и свяжемся с вами. - person Sudhanshu Vohra; 15.07.2018
comment
@PavanVarma, вы когда-нибудь находили решение для этого общего эффекта перехода? - person cking24343; 25.07.2020