Начальный вид виден над конечным видом в форме MaterialContainerTransform

#android #android-fragments #material-design #floating-action-button #android-transitions

Вопрос:

Я изучаю переходы в Android с помощью движения материала. Следуя документации и образцу приложения, Ответьте, мне удалось реализовать преобразование контейнера между FAB и новым фрагментом. Дело в том, что FAB находится над новым фрагментом до тех пор, пока переход не закончится, что приводит к следующей визуальной ошибке.

Код для управления переходом:

 enterTransition = MaterialContainerTransform().apply {
            startView = newRecipeBtn
            endView = binding.recipePager
            scrimColor = Color.TRANSPARENT
            duration = resources.getInteger(R.integer.motion_duration_large).toLong()
            startContainerColor = resources.getColor(R.color.secondaryColor)
            containerColor = resources.getColor(R.color.colorSurface)
            endContainerColor = resources.getColor(R.color.colorSurface)
        }
        returnTransition = Slide().apply {
            addTarget(R.id.recipe_pager)
            resources.getInteger(R.integer.motion_duration_large).toLong()
        }
 

Материальное содержание

Как вы можете видеть, я уже изменил цвета для начального и конечного контейнеров, как указано в документации, на случай, если у них разные цвета фона. Надеюсь, кто-нибудь сможет направить меня в правильном направлении, потому что сейчас я немного заблудился.

Ответ №1:

Довольно поздно, но я нашел решение.

Причина

Позвольте мне перейти к сути, на самом деле все дело в том, что фон нашего 2-го фрагмента Color.TRANSPARENT по умолчанию. В любом виде анимации обновляется только вид, а не физический размер. Например, если у вас есть анимация для масштабирования fab, на fab не повлияет масштабирование anim. То же самое происходит и здесь.

Осветление

Я надеюсь, что вы следовали за codeLab, там они установлены emailCarview как startView . Если вы заметили, все fragment_compose.xml покрыто видами, для которых не осталось места Color.TRANSPARENT . Таким образом, там все в порядке.

Как исправить

Просто добавьте android:background="?attr/colorSurface" свой 2-й фрагмент/действие. Не беспокойтесь о темах, все будет нормально, как обычно.