Проблемы с пустым начальным набором ограничений & 'производнойКонструкцииФром' на макете движения - PullRequest
0 голосов
/ 28 марта 2020

Я сейчас делаю свои первые шаги в макете движения.

Пример, который я хочу создать, следующий:

Wanted Result

Макет движения с двумя FAB (мини и обычный). На изображении выше показано конечное состояние после щелчка FAB обычного размера.


Что я пробовал:

Motion Layout (является частью другой файл макета):

<androidx.constraintlayout.motion.widget.MotionLayout
            android:id="@+id/include"
            app:motionDebug="SHOW_PATH"
            android:layout_width="0dp"
            android:layout_height="0dp"

            android:background="@android:color/darker_gray"
            android:layout_margin="8dp"
            app:layoutDescription="@xml/menu_scene"
            app:layout_constraintTop_toBottomOf="@id/text"
            app:layout_constraintStart_toStartOf="@id/text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent">

            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/images_button"

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

                app:layout_constraintStart_toStartOf="@id/menu_button"
                app:layout_constraintTop_toTopOf="@id/menu_button"
                app:layout_constraintBottom_toBottomOf="@id/menu_button"

                android:src="@drawable/ic_image"
                app:fabSize="mini" />

            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/menu_button"

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

                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"

                android:src="@drawable/ic_edit" />

        </androidx.constraintlayout.motion.widget.MotionLayout>

MotionScene:

<MotionScene xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <Transition
        app:constraintSetStart="@+id/start"
        app:constraintSetEnd="@+id/end">

        <OnClick
            app:targetId="@+id/menu_button"
            app:clickAction="toggle" />
    </Transition>
<!-- pulls constraints from layout -->
    <ConstraintSet android:id="@+id/start" />

    <ConstraintSet android:id="@+id/end">
        <Constraint android:id="@id/images_button">
            <Layout
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintBottom_toBottomOf="parent" />
        </Constraint>
    </ConstraintSet>
</MotionScene>

Но, к сожалению, с этой конфигурацией я получил это:

wrong result

Крошечная розовая точка в левом нижнем углу - это мини-FAB.


Поскольку я слышал о DerveConstraintsFrom , я дал ему шанс :

<MotionScene ...>

    <Transition ...>
       ...
    </Transition>

    <ConstraintSet android:id="@+id/start" />

    <ConstraintSet
        android:id="@+id/end"
        app:deriveConstraintsFrom="@id/start">

        <Constraint android:id="@id/images_button">
           ...
        </Constraint>

    </ConstraintSet>
</MotionScene>

Но я получил тот же результат! : (


Единственный способ получить желаемый результат был со следующей конфигурацией набора ограничений:

<MotionScene ...>

    ...

    <ConstraintSet android:id="@+id/start" />

    <ConstraintSet android:id="@+id/end">
        <Constraint android:id="@id/images_button">

            <!--  duplicated the layout properties from the initial layout :( -->
            <Layout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="@id/menu_button"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintBottom_toBottomOf="parent" />
        </Constraint>
    </ConstraintSet>
</MotionScene>

Заключение:

Я думал, что пустой набор ограничений <ConstraintSet android:id="@+id/start" /> извлекает свои ограничения из самого макета, а app:deriveConstraintsFrom="@id/start" в другом наборе ограничений определяет все ограничения из начального набора ограничений и перезаписывает свои собственные.

Может кто-нибудь сказать мне почему это не работает? Или я что-то пропустил?

Спасибо, Крис

PS .: Я использую androidx.constraintlayout:constraintlayout:2.0.0-beta4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...