#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-й фрагмент/действие. Не беспокойтесь о темах, все будет нормально, как обычно.