美文网首页Android开发
Android开发MotionLayout做动画

Android开发MotionLayout做动画

作者: 你的益达233 | 来源:发表于2022-07-12 16:34 被阅读0次
<?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
    android:id="@+id/first_half"
    motion:constraintSetEnd="@id/top"
    motion:constraintSetStart="@id/center"
    motion:duration="800">
    <KeyFrameSet>
        <KeyPosition
            motion:framePosition="40"
            motion:motionTarget="@id/tv_profit_num"
            motion:keyPositionType="deltaRelative"
            motion:percentY="0.1"/>
        <KeyPosition
            motion:framePosition="70"
            motion:motionTarget="@id/tv_profit_num"
            motion:keyPositionType="deltaRelative"
            motion:percentY="0.3"/>
        <KeyAttribute
            motion:framePosition="90"
            motion:motionTarget="@id/tv_profit_num"
            motion:keyPositionType="deltaRelative"
            motion:percentY="0.6"
            android:alpha="1"/>
    </KeyFrameSet>
</Transition>

<Transition
    android:id="@+id/all"
    motion:constraintSetEnd="@id/top"
    motion:constraintSetStart="@id/lower"
    motion:duration="250">
    <KeyFrameSet>
        <KeyAttribute
            motion:framePosition="50"
            motion:motionTarget="@id/tv_profit_num"
            motion:keyPositionType="parentRelative"
            motion:percentY="0.5"
            android:alpha="1"/>
    </KeyFrameSet>
</Transition>

<Transition
    android:id="@+id/lower_half"
    motion:constraintSetEnd="@id/center"
    motion:constraintSetStart="@id/lower"
    motion:duration="800">
    <KeyFrameSet>
        <KeyAttribute
            motion:framePosition="10"
            motion:motionTarget="@id/tv_profit_num"
            motion:keyPositionType="deltaRelative"
            android:alpha="1"
            motion:percentY="0.4"/>
        <KeyPosition
            motion:framePosition="30"
            motion:motionTarget="@id/tv_profit_num"
            motion:keyPositionType="deltaRelative"
            motion:percentY="0.7"/>
        <KeyPosition
            motion:framePosition="60"
            motion:motionTarget="@id/tv_profit_num"
            motion:keyPositionType="deltaRelative"
            motion:percentY="0.9"/>
    </KeyFrameSet>
</Transition>

<ConstraintSet android:id="@+id/center">
    <Constraint
        android:id="@+id/tv_profit_num"
        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"
        motion:layout_constraintTop_toTopOf="parent"/>
</ConstraintSet>

<ConstraintSet android:id="@+id/top">
    <Constraint
        android:id="@+id/tv_profit_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:alpha="0"
        motion:layout_constraintLeft_toLeftOf="parent"
        motion:layout_constraintRight_toRightOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>

<ConstraintSet android:id="@+id/lower">
    <Constraint
        android:id="@+id/tv_profit_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:alpha="0"
        motion:layout_constraintLeft_toLeftOf="parent"
        motion:layout_constraintRight_toRightOf="parent"
        motion:layout_constraintBottom_toBottomOf="parent" />
</ConstraintSet>
</MotionScene>

要切换Transition,它需要定义在同一个切换文件里面。如上面代码。

切换动画时需要调transitionToStart()

如下面代码:

        motionLayout?.run{
                            transitionToStart()
                            setTransition(if(animationType == 0) R.id.all else R.id.lower_half)
                            transitionToEnd()
                        }

相关文章

网友评论

    本文标题:Android开发MotionLayout做动画

    本文链接:https://www.haomeiwen.com/subject/fhsabrtx.html