Анимация вложенного фрагмента в фрагменте ViewPager запускается перед рендерингом

У меня есть фрагмент ViewPager

 class PagerFragment() : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val pagerView = view as ViewPager val adapter = PagerAdapter(childFragmentManager, items) pagerView.adapter = adapter } } 

со следующим адаптером

 class PagerAdapter(val fm: FragmentManager, val items: ArrayList<Item>) : FragmentStatePagerAdapter(fm) { override fun getItem(position: Int): Fragment { val item = items[position] return NestedFragment.newInstance(item) } override fun getCount(): Int { return items.size } } 

который гнездится фрагментами с несколькими анимациями, вызванными onViewCreated следующим образом:

 class NestedFragment() : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val one = AnimationUtils.loadAnimation(context, R.anim.one) val two = AnimationUtils.loadAnimation(context, R.anim.two) val three = AnimationUtils.loadAnimation(context, R.anim.three) view.findViewById<ImageView>(R.id.pic).startAnimation(one) view.findViewById<ConstraintLayout>(R.id.content).startAnimation(two) view.findViewById<ImageView>(R.id.img).startAnimation(three) } } 

Однако часто к моменту появления на экране вложенного фрагмента анимация уже началась или даже закончилась 🙁

Есть ли способ определить, действительно ли фрагмент отображается на экране устройства? Конечно, любые другие полезные предложения для решения проблемы приветствуются.

Вот что сработало для меня.

 class NestedFragment() : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val one = AnimationUtils.loadAnimation(context, R.anim.one) val two = AnimationUtils.loadAnimation(context, R.anim.two) val three = AnimationUtils.loadAnimation(context, R.anim.three) view.post(Runnable { /* If the animation doesn't trigger you may try to hide elements visibility and reveal them before animation starts */ view.findViewById<ImageView>(R.id.pic).startAnimation(one) view.findViewById<ConstraintLayout>(R.id.content).startAnimation(two) view.findViewById<ImageView>(R.id.img).startAnimation(three) }) } } 

Если анимация все еще не срабатывает, вы можете попытаться скрыть видимость видимости и показать ее прямо перед анимацией.

Intereting Posts
Добавить пользовательские запросы REST API для Twitter с помощью Kotlin Как преобразовать const char * в KString в Kotlin / Native? Межстраничные объявления Admob: «IllegalStateException: только действия в полноэкранном режиме могут запрашивать ориентацию» Как конвертировать стороннюю библиотеку Android в kotlin? Случай использования анонимной функции Kotlin? Диапазоны в Котлин с использованием типа данных Double Android заполняет массив с помощью данных firebase, а не строк Почему интеллектуальное сканирование сбрасывается для значения NULL после установки значения и проверки, является ли оно нулевым? Android Studio 3.0 Предварительный просмотр Отсутствует Импорт при рефакторинге кода Котлина Приложение build.gradle.kts Файл Unresolved Reference Erros Обозначение переменной Not Kotlin Ошибка вывода Kotlin и RxJava Kotlin 1.1.3-2 Невозможно создать экземпляр фрагмента в OnResume Android Как исправить неоднозначность перегрузки в Котлине (без лямбда)? Как установить значение свойства по умолчанию для Kotlin для `this`