首页 > 解决方案 > MotionLayout如何旋转元素?

问题描述

现在我有一个包含两个元素的议案。当第一个持续时间为 50% 时,第二个开始。但我想将第二个元素在半过渡中旋转到最后。我尝试在 KeyCycle 中执行此操作,但它不起作用。也许我需要在 KeyAttribute 中这样做?但它也不起作用。也许有人给我小费?

场景:

<Transition
    motion:autoTransition="animateToEnd"
    motion:constraintSetEnd="@+id/end"
    motion:constraintSetStart="@id/start"
    motion:duration="1500">

    <KeyFrameSet>

        <KeyPosition
            motion:framePosition="50"
            motion:keyPositionType="pathRelative"
            motion:motionTarget="@id/imageView"
            motion:percentX="1" />

        <KeyPosition
            motion:framePosition="50"
            motion:keyPositionType="pathRelative"
            motion:motionTarget="@id/cardYes"
            motion:percentX="0" />

        <KeyCycle
            android:translationY="50dp"
            motion:framePosition="300"
            motion:motionTarget="@+id/imageView"
            motion:waveOffset="50dp"
            motion:wavePeriod="2"
            motion:waveShape="sin" />
    </KeyFrameSet>

</Transition>

<ConstraintSet android:id="@+id/start">
    <Constraint
        android:id="@+id/imageView"
        android:layout_width="0dp"
        android:layout_height="10dp"
        android:layout_marginTop="15dp"
        motion:layout_constraintBottom_toBottomOf="parent"
        motion:layout_constraintRight_toRightOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />

    <Constraint
        android:id="@+id/cardYes"
        android:layout_width="100dp"
        android:layout_height="100dp"
        motion:layout_constraintRight_toLeftOf="parent"
        motion:layout_constraintTop_toBottomOf="parent" />

</ConstraintSet>

<ConstraintSet android:id="@+id/end">
    <Constraint
        android:id="@+id/imageView"
        android:layout_width="400dp"
        android:layout_height="290dp"
        android:layout_marginTop="15dp"
        motion:layout_constraintRight_toRightOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />

    <Constraint
        android:id="@+id/cardYes"
        android:layout_width="100dp"
        android:layout_height="100dp"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintTop_toBottomOf="@+id/imageView" />
</ConstraintSet>

标签: kotlinandroid-motionlayout

解决方案


必须有3个KeyCycle才能正常工作。

在你的情况下,也许你需要这样的代码:

 <KeyFrameSet>
        <KeyAttribute
            android:rotation="0"
            motion:framePosition="50"
            motion:motionTarget="@id/view"
            />
        <KeyAttribute
            android:rotation="360"
            motion:framePosition="100"
            motion:motionTarget="@id/view"
            />
</KeyFrameSet>

推荐阅读