[kotlin] 코틀린과 Android Jetpack의 MotionLayout을 사용하여 화면 전환 애니메이션을 구현하는 방법은?

아래는 간단한 예제 코드입니다.

// activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<MotionLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto"
    android:id="@+id/motionLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    motion:layoutDescription="@xml/motion_scene">

    <View
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#FF5722"/>

</MotionLayout>
// res/xml/motion_scene.xml

<?xml version="1.0" encoding="utf-8"?>
<MotionScene 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <Transition
        app:constraintSetStart="@id/start"
        app:constraintSetEnd="@id/end">
        
        <KeyFrameSet>
            <KeyPosition
                app:framePosition="20"
                app:percentX="1"
                app:percentY="0" />
        </KeyFrameSet>

    </Transition>

    <ConstraintSet android:id="@+id/start">
        <Constraint
            android:id="@+id/view"
            android:layout_width="0dp"
            android:layout_height="200dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@+id/view"
            android:layout_width="0dp"
            android:layout_height="200dp"
            app:layout_constraintStart_toEndOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
    </ConstraintSet>

</MotionScene>

이제, 액티비티나 프래그먼트에서 MotionLayout을 초기화하고 전환을 시작하도록 코드를 추가하면 됩니다.

// MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val motionLayout = findViewById<MotionLayout>(R.id.motionLayout)
        motionLayout.transitionToState(R.id.end)
    }
}

이렇게하면 화면 전환 애니메이션이 구현될 것입니다! MotionLayout을 사용하면 더 많은 복잡한 애니메이션도 구현할 수 있으며, XML 레이아웃 파일을 사용하여 애니메이션을 정의하므로 코드가 간결해지고 유지보수가 쉬워집니다.

더 많은 MotionLayout 및 Android Jetpack에 대한 정보는 https://developer.android.com/training/constraint-layout/motionlayout를 참조하세요.