Пока что я прочитал всю доступную документацию о MotionLayout
здесь (официальные документы), доступные примеры, очень сложный пример здесь и другие примеры со многих сайтов. Что мне не удалось получить, так это воспроизвести / запустить анимацию одну за другой.
Возможно, ответят KeyPosition
и KeyAttribute
, но я не нашел ни одного примера / документации, объясняющих, как их использовать.
Это макет 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"
>
<Transition
motion:constraintSetStart="@+id/start"
motion:constraintSetEnd="@+id/end"
motion:duration="500">
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:layout_width="wrap_content"
android:layout_height="wrap_content"
motion:layout_constraintTop_toBottomOf="parent"
motion:layout_constraintLeft_toLeftOf="parent"
motion:layout_constraintRight_toRightOf="parent"
android:id="@+id/bottomText"
/>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:layout_width="wrap_content"
android:layout_height="wrap_content"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintLeft_toLeftOf="parent"
motion:layout_constraintRight_toRightOf="parent"
android:id="@+id/bottomText"
/>
</ConstraintSet>
<ConstraintSet android:id="@+id/start1">
<Constraint
android:layout_width="wrap_content"
android:layout_height="wrap_content"
motion:layout_constraintBottom_toTopOf="parent"
android:id="@+id/arcView"
/>
</ConstraintSet>
<ConstraintSet android:id="@+id/end1">
<Constraint
android:layout_width="match_parent"
android:layout_height="0dp"
motion:layout_constraintHeight_percent=".8"
motion:layout_constraintTop_toTopOf="parent"
android:id="@+id/arcView"
/>
</ConstraintSet>
</MotionScene>
Вот так я его запускаю: (он не запускается автоматически даже при autoTransition
)
val motionContainer : MotionLayout = findViewById(R.id.motionContainer)
motionContainer.setTransition(R.id.start, R.id.end)
motionContainer.transitionToEnd()
В сложном примере выше для запуска следующего используется motionLayout.doOnEnd()
переход, но это не доступная функция, и я не нашел его где-нибудь в его коде. Как я проверил больше, doOnEnd()
является функцией Animator()
, но ее связь с MotionScene
/ MotionLayout
не может быть найдена.
Я подумал, что при следующем переходе это будет работать, как показано ниже но это тоже не помогло.
val motionContainer : MotionLayout = findViewById(R.id.motionContainer)
motionContainer.setTransition(R.id.start, R.id.end)
motionContainer.transitionToEnd()
motionContainer.setTransition(R.id.start1, R.id.end1)
motionContainer.transitionToEnd()
Итак, как воспроизвести эти переходы один за другим?