У меня есть ConstraintLayout с некоторыми представлениями и ViewStub. Я преобразовал его в MotionLayout, но ViewStub не отображается.

У меня такой расклад:

<MotionLayout app:layoutDescription="@xml/motion_scene">
    <Button id="button01"/>
    <ViewStub id="stub" inflatedId="merger"/>
</MotionLayout>

Для данной сцены движения:

<MotionScene>
    <Transition
      app:constraintSetStart="@id/start"
      app:constraintSetEnd="@id/end">
        <OnClick app:clickAction="toggle" app:targetId="button"/>            
    </Transition>
    <ConstraintSet android:id="@+id/start">
        <Constraint android:id="@id/button" ...>
    </ConstraintSet>
    <ConstraintSet android:id="@+id/end">
        <Constraint android:id="@id/button" ...>
    </ConstraintSet>
</MotionScene>

В своей деятельности я установил видимость ViewStub на View.VISIBLE. Это работает, когда я использую ConstraintLayout или MotionLayout без motionscene, что означает, что заглушка представления правильно заменяется своим содержимым, и все видно. Когда я использую движущуюся сцену, анимация кнопки воспроизводится правильно, но раздутый макет ViewStub невидим (я думаю, не исчез, потому что я вижу его в инспекторе макетов).

Я пробовал использовать свойство

app: visibilityMode = "игнорировать"

Безуспешно

Это потому, что MotionLayout все еще находится в разработке или я что-то пропустил? (Еще одна проблема с wrap_content?).

Заранее спасибо !

2
Nawick 3 Дек 2019 в 14:37
Такая же проблема здесь!
 – 
Gnzlt
5 Дек 2019 в 09:35

1 ответ

Несколько заметок. Во-первых, для того, чтобы viewStub появился, он должен быть расширен, а не только набор видимости. Поэтому убедитесь, что вы вызываете stub.inflate() где-нибудь в коде.

Кроме того, любые представления, которые вы хотите отображать в MotionLayout, должны быть определены с ограничениями в motionScene. Так что, если вы ожидаете иметь завышенное представление, это завышенное представление должно быть в ограничениях. Что-то вроде этого:

<MotionScene>
<Transition
  app:constraintSetStart="@id/start"
  app:constraintSetEnd="@id/end">
    <OnClick app:clickAction="toggle" app:targetId="button"/>            
</Transition>
<ConstraintSet android:id="@+id/start">
    <Constraint android:id="@id/button" ...>
    <Constraint android:id="@id/merger" ...>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
    <Constraint android:id="@id/button" ...>
    <Constraint android:id="@id/merger" ...>
</ConstraintSet>

Попробуйте и дайте мне знать, как это происходит!

0
kjanderson2 17 Янв 2020 в 03:32