В дизайне моего приложения мне нужно изменить менеджер компоновки recycler-view с линейно-горизонтального на менеджер компоновки сетки.
Мне нужно сделать этот переход плавным. Может ли кто-нибудь предложить мне, как я могу сделать это возможным.
В дизайне моего приложения мне нужно изменить менеджер компоновки recycler-view с линейно-горизонтального на менеджер компоновки сетки.
Мне нужно сделать этот переход плавным. Может ли кто-нибудь предложить мне, как я могу сделать это возможным.
Чтобы анимировать изменение менеджера компоновки, вам нужно будет применить анимацию компоновки к 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);