WindowInset с переходом общего элемента фрагмента

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

Я использую код ниже.

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val view = layoutInflater?.inflate(R.layout.onboarding_layout, container, false)

    return view
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    ViewCompat.setOnApplyWindowInsetsListener(appimageviewLogo) { view, insets ->
        val params = view.layoutParams as ViewGroup.MarginLayoutParams
        params.topMargin = params.topMargin + insets.systemWindowInsetTop
        insets
    }

    ViewCompat.setOnApplyWindowInsetsListener(appbuttonSkip) { view, insets ->
        val params = view.layoutParams as ViewGroup.MarginLayoutParams
        params.bottomMargin = params.bottomMargin + insets.systemWindowInsetBottom
        insets.consumeSystemWindowInsets()
    }

    ViewCompat.requestApplyInsets(appimageviewLogo)
    ViewCompat.requestApplyInsets(appbuttonSkip)
}

может кто-нибудь помочь мне здесь?

Как я могу применить вставку окна перед выполнением перехода элемента Shared, чтобы "прыжок" не происходил?

1 ответ

Решение

В общем, я отвечу на свой вопрос. Решение состояло в том, чтобы отложить enterTransition входящего фрагмента, затем запросить вставку окна, а затем запустить postponedEnterTransition.

Я получил все это с поста Андраника Азизбекяна в Medium. Вы можете посмотреть его пост здесь об оконных вставках здесь, а здесь - ссылка на мои вопросы и его ответ на эти вопросы.:)

Примечание. Чтобы отложить ввод перехода для работы с фрагментами, для setReorderingAllowed должно быть установлено значение true с FragmentTransaction.

Другие вопросы по тегам