В RecyclerView анимация расширения по умолчанию работает нормально. , но когда он сворачивается, он мгновенно скрывает содержимое и только затем перемещает нижние элементы, поэтому я решил найти способ добиться правильной анимации развертывания/свертывания, используя вместо этого MotionLayout.
Ниже приведен пример того, что мне удалось сделать на данный момент:

Я не хочу, чтобы он анимировал ширину, поэтому я могу просто анимировать высоту контейнера от 0dp до wrap_content, но для целей этого примера, и чтобы все было просто, я пусть это будет простая анимация между исчезнувшей видимостью и видимой, но проблема возникает в любом случае.
Проблема любого из методов, которые я использовал, заключается в следующем: при изменении размера любой текст в дочерних представлениях обрезается, см. ниже, что я имею в виду:
[img]https://i.sstatic.net /r8JXX.gif[/img]
Как вы Как видите, буквы обрезаются до того, как нижняя часть их родительского контейнера фактически закрывает их, и я обнаружил, что это происходит из-за их представлений или родительских представлений, в которых используются отступы, поля или и то, и другое.К сожалению, решение не является простым «просто не используйте поля и отступы», потому что тогда становится невозможным динамически добавлять интервалы вокруг текста, когда каждое устройство может иметь разные настройки масштаба шрифта, и я не могу просто использовать определенные высоты и ширины для одного и того же причина.
К сожалению, никакие отключения clipChildren и clipToPadding не работают, я установил эти атрибуты для всей иерархии и не имел никакого значения.
Я также пытался поместить textView внутри контейнера и добавить к каждому из них поля или отступы, но та же проблема все еще возникает.
Я также уже пробовал с движением:layoutDuringTransition="honorRequest" " и без, и в данном случае это не имело никакого значения.
Нет ли способа предотвратить обрезание текста внутри во время анимации/перехода?
Ниже это файл макета:
& l t ; a n d r o i d x . c o n s t r a i n t l a y o u t . m o t i o n . w i d g e t . M o t i o n L a y o u t < b r / > x m l n s : a n d r o i d = & q u o t ; h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s / a n d r o i d & q u o t ; < b r / > x m l n s : a p p = & q u o t ; h t t p : / / s c h e m a s . a n d r o i d . c o m / a p k / r e s - a u t o & q u o t ; < b r / > x m l n s : t o o l s = & q u o t ; h t t p : / / s c h e m a s . a n d r o i d . c o m / t o o l s & q u o t ; < b r / > a n d r o i d : l a y o u t _ w i d t h = & q u o t ; m a t c h _ p a r e n t & q u o t ; < b r / > a n d r o i d : l a y o u t _ h e i g h t = & q u o t ; w r a p _ c o n t e n t & q u o t ; < b r / > a n d r o i d : c l i p C h i l d r e n = & q u o t ; f a l s e & q u o t ; < b r / > a n d r o i d : c l i p T o P a d d i n g = & q u o t ; f a l s e & q u o t ; < b r / > a p p : l a y o u t D e s c r i p t i o n = & q u o t ; @ x m l / i t e m _ m o t i o n _ s c e n e & q u o t ; & g t ; < b r / > < b r / > & l t ; L i n e a r L a y o u t < b r / > a n d r o i d : i d = & q u o t ; @ + i d / h e a d e r C o n t a i n e r & q u o t ; < b r / > a n d r o i d : l a y o u t _ w i d t h = & q u o t ; m a t c h _ p a r e n t & q u o t ; < b r / > a n d r o i d : l a y o u t _ h e i g h t = & q u o t ; w r a p _ c o n t e n t & q u o t ; < b r / > a n d r o i d : b a c k g r o u n d = & q u o t ; # 4 2 A 5 F 5 & q u o t ; < b r / > a n d r o i d : g r a v i t y = & q u o t ; c e n t e r _ v e r t i c a l & q u o t ; < b r / > a n d r o i d : o r i e n t a t i o n = & q u o t ; h o r i z o n t a l & q u o t ; < b r / > a p p : l a y o u t _ c o n s t r a i n t B o t t o m _ t o T o p O f = & q u o t ; @ i d / b o t t o m & q u o t ; < b r / > a p p : l a y o u t _ c o n s t r a i n t E n d _ t o E n d O f = & q u o t ; p a r e n t & q u o t ; < b r / > a p p : l a y o u t _ c o n s t r a i n t S t a r t _ t o S t a r t O f = & q u o t ; p a r e n t & q u o t ; < b r / > a p p : l a y o u t _ c o n s t r a i n t T o p _ t o T o p O f = & q u o t ; p a r e n t & q u o t ; & g t ; < b r / > < b r / > & l t ; T e x t V i e w < b r / > a n d r o i d : i d = & q u o t ; @ + i d / l a b e l & q u o t ; < b r / > a n d r o i d : l a y o u t _ w i d t h = & q u o t ; 0 d p & q u o t ; < b r / > a n d r o i d : l a y o u t _ h e i g h t = & q u o t ; w r a p _ c o n t e n t & q u o t ; < b r / > a n d r o i d : l a y o u t _ m a r g i n S t a r t = & q u o t ; 1 6 d p & q u o t ; < b r / > a n d r o i d : l a y o u t _ w e i g h t = & q u o t ; 1 & q u o t ; < b r / > a n d r o i d : t e x t C o l o r = & q u o t ; @ c o l o r / w h i t e & q u o t ; < b r / > t o o l s : t e x t = & q u o t ; m y l a b e l & q u o t ; / & g t ; < b r / > < b r / > & l t ; F r a m e L a y o u t < b r / > a n d r o i d : i d = & q u o t ; @ + i d / t o g g l e S i z e C o n t a i n e r & q u o t ; < b r / > a n d r o i d : l a y o u t _ w i d t h = & q u o t ; 4 8 d p & q u o t ; < b r / > a n d r o i d : l a y o u t _ h e i g h t = & q u o t ; 4 8 d p & q u o t ; < b r / > a n d r o i d : c l i c k a b l e = & q u o t ; t r u e & q u o t ; < b r / > a n d r o i d : c l i p C h i l d r e n = & q u o t ; f a l s e & q u o t ; < b r / > a n d r o i d : f o c u s a b l e = & q u o t ; t r u e & q u o t ; & g t ; < b r / > < b r / > & l t ; I m a g e V i e w < b r / > a n d r o i d : i d = & q u o t ; @ + i d / t o g g l e S i z e & q u o t ; < b r / > a n d r o i d:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:contentDescription="@string/app_name"
android:duplicateParentState="true"
android:foreground="?selectableItemBackgroundBorderless"
android:src="@drawable/baseline_expand_more_24"
app:tint="@color/white"/>
и соответствующий файл движения:
Подробнее здесь: https://stackoverflow.com/questions/772 ... o-fix-this
Мобильная версия