Tsudzukeru
@Tsudzukeru

Почему CutomView меняет свой размер в MotionLayout при фиксированной ширине?

Использую MotionLayout для анимации карточки выбранного подарка. Сама карточка это CustomView с TickerView и двумя TextView.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/openGiftContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_new_loyalty_rewarding_corners_card"
    android:gravity="center_horizontal"
    android:layout_gravity="center_horizontal"
    android:paddingVertical="@dimen/grid_3"
    android:orientation="vertical">

    <ru.secret.secret.customviews.v3.ticker.TickerView
        android:id="@+id/ivIconTicker"
        android:layout_width="@dimen/grid_9"
        android:layout_height="@dimen/grid_9"
        tools:srcCompat="@drawable/circle_blue" />

    <TextView
        android:id="@+id/tvTitle"
        style="@style/H0.TxtIconAlwaysBlack"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/grid_3_5"
        android:gravity="center"
        android:maxLines="2"
        android:ellipsize="end"
        android:paddingHorizontal="@dimen/grid_2"
        tools:text="word1 word2 word3 word4 word5 word6 word7 word8 word9 word10" />

    <TextView
        android:id="@+id/tvDescription"
        style="@style/Body1.Regular.TxtIconNeutrals2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/grid_2_5"
        android:gravity="center"
        android:maxLines="2"
        android:ellipsize="end"
        android:paddingHorizontal="@dimen/grid_3_5"
        tools:text="word1 word2 word3 word4 word5 word6 word7 word8 word9 word10"
        tools:visibility="visible" />

</LinearLayout>


С бэка может прийти текст разной длины для TextView, но ожидаем что он будет не более двух строк. Размеры CustomView в MotionScene и Layout фрагмента установлены как

android:layout_width="match_parent"
android:layout_height="wrap_content"


Проблема заключается в том, что ширина везде хоть и установлена как match_parent, но я не уверен что это так во время вращения view (rotationY). Слова со второй строки обоих TextView могут уходить на первую строку во время анимации. Не знаю как это пофиксить кроме как фиксированной шириной и высотой Layout внутри CustomView. Есть ли способы получше?

сокращенный MotionScene

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto"
    motion:defaultDuration="10000">

    <Transition
        android:id="@+id/transitionOpenGiftToCongrats"
        motion:constraintSetEnd="@+id/endGiftScaleToCenter"
        motion:constraintSetStart="@id/startGiftScaleToCenter">
        <KeyFrameSet>
            ...
            <!--CongratsOpenGiftView-->
            <KeyAttribute
                android:alpha="0"
                motion:framePosition="0"
                motion:motionTarget="@+id/congratsOpenGiftView" />
            <KeyAttribute
                android:alpha="0"
                motion:framePosition="49"
                motion:motionTarget="@+id/congratsOpenGiftView" />
            <KeyAttribute
                android:alpha="1"
                motion:framePosition="50"
                motion:motionTarget="@+id/congratsOpenGiftView" />
            <KeyAttribute
                android:alpha="1"
                motion:framePosition="100"
                motion:motionTarget="@+id/congratsOpenGiftView" />
            ...
        </KeyFrameSet>
    </Transition>

    <ConstraintSet android:id="@+id/startGiftScaleToCenter">
        ...
        <Constraint
            android:id="@+id/congratsOpenGiftView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alpha="0"
            android:rotationY="180"
            android:layout_marginStart="@dimen/grid_2"
            android:layout_marginEnd="@dimen/grid_2"
            motion:layout_constraintVertical_bias="0.5" />

    </ConstraintSet>

    <ConstraintSet android:id="@+id/endGiftScaleToCenter">
        ...
        <Constraint
            android:id="@+id/congratsOpenGiftView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alpha="1"
            android:rotationY="360"
            android:layout_marginStart="@dimen/grid_2"
            android:layout_marginEnd="@dimen/grid_2"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintStart_toStartOf="parent"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintVertical_bias="0.5" />
</MotionScene>


Сокращенный Layout фрагмента

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/rootML"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:background="@drawable/bg_choice_rewarding_liner_gradient"
    app:layoutDescription="@xml/open_gift_to_congrats_scene">
    
    ...

    <ru.broker.feature.loyalty.impl.view.new_views.CongratsOpenGiftView
        android:id="@+id/congratsOpenGiftView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/grid_2"
        android:layout_marginEnd="@dimen/grid_2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.5"/>

</androidx.constraintlayout.motion.widget.MotionLayout>
  • Вопрос задан
  • 28 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы