Как я могу оживить Recycler-View при смене менеджера по расположению
В дизайне моего приложения мне нужно сменить менеджер компоновки в режиме повторного просмотра с линейно-горизонтального на менеджер компоновки сетки
Мне нужно сделать этот переход плавным. Может ли кто-нибудь предложить мне, как я могу сделать это возможным.
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) Теперь, когда вы смените Layout Manager(скажем, с Grid на Linear layout), просто установите эту анимацию в 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);