Android ViewPager CrossFade анимация

Я реализую представление BottomNavigation для Android, и у меня есть некоторые фрагменты, которые можно показать как страницы BottomNavigation. В соответствии с листами руководства по дизайну материалов Google я хочу показать фрагменты с анимацией перекрестного затухания.

Прикоснувшись к элементам BottomNavigation, мой ViewpPager меняет фрагменты с помощью слайд-анимации по умолчанию.

Я прочитал некоторые решения в этом и этом . Но это не очень увядающая анимация, и я не мог установить длительность затухания.

Итак, есть ли способ установить анимацию при изменении вкладок ViewPager?

Наконец, я нашел ответ.

Я изменил ViewPager с помощью макета, чтобы сохранить мои фрагменты (макет фрейма). Затем я добавил фрагменты в фрагментTransaction.

Прикоснувшись к элементу BottomNavigation, текущий фрагмент скрывается, а новые фрагменты отображаются с анимацией затухания, определенной в фрагменте.

И это мой код:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_page); addFragmentsToManager(); } private void addFragmentsToManager() { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); fragmentTransaction.add(R.id.flContent, tripFragment, tripFragment.getClass().getSimpleName()); fragmentTransaction.add(R.id.flContent, notificationFragment, notificationFragment.getClass().getSimpleName()); fragmentTransaction.add(R.id.flContent, searchFragment, searchFragment.getClass().getSimpleName()); fragmentTransaction.add(R.id.flContent, profileFragment, profileFragment.getClass().getSimpleName()); fragmentTransaction.hide(tripFragment); fragmentTransaction.hide(notificationFragment); fragmentTransaction.hide(searchFragment); fragmentTransaction.hide(profileFragment); fragmentTransaction.commit(); } private void changeTab(int position) { Fragment fragment; switch (position) { fragment = .....// get framgnet from position } FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); fragmentTransaction.hide(prvFragment); fragmentTransaction.show(fragment).commit(); prvFragment = fragment; }