본문 바로가기
안드로이드 코틀린

[Kotlin][Android] Activity 이동 애니메이션

by teamnova 2022. 1. 18.

Kotlin 으로 Activity 이동시 화면이동 애니메이션 을 해보겠습니다.

 

MainActivty 입니다.

 

총 두개의 버튼을 만들어줍니다.

1. SlideLeftActivity 로 이동하는는  버튼

2. SlideUpActivity 로 이동하는 버튼

 

val intent = Intent(Context, Class<?>) 를 통해 어디 Activity로 이동할지 지정합니다.

 

overridePendingTransition(int enterAnim, int exitAnim) 를 통해 처음과 끝에 대한 애니메이션 을 지정해줍니다.

 

class MainActivity : AppCompatActivity() {

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


        // 왼쪽에서 오른쪽 방향으로 SlideLeftActivity 로 화면이동.
        findViewById<Button>(R.id.left_btn).setOnClickListener {

            val intent = Intent(this, SlideLeftActivity::class.java)
            startActivity(intent)

		// 왼쪽에서 오른쪽으로 activity 화면이 이동하게 애니메이션 지정
            overridePendingTransition(R.anim.slide_left_enter, R.anim.slide_left_exit)

        }

        // 아래에서 위로 방향으로  SlideUpActivity 로 화면이동.
        findViewById<Button>(R.id.down_btn).setOnClickListener {
            val intent = Intent(this, SlideUpActivity::class.java)
            startActivity(intent)
            
            // 아래에서 위로 activity 화면이 이동하게 애니메이션 지정
            overridePendingTransition(R.anim.slide_up_enter, R.anim.slide_up_exit)
        }
    }

}

 

이제 여러분들은 slide_left_enter가 어떻게 되어있는지 궁금하실것같은데

 

slide_left_enter.xml은 아래와 같다.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="500"
        android:fromXDelta="-100%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />
</set>

slde_left_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="100%"
        android:toYDelta="0%" />
</set>

 

slide_up_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:toXDelta="0%"
        android:fromYDelta="100%"
        android:toYDelta="0%" />
</set>

slide_up_exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:toXDelta="0%"
        android:fromYDelta="0%"
        android:toYDelta="-100%" />
</set>

 

다양한 애니메이션 이동을 translate 태그를 통해 사용이 가능한데요

 

translate 에 속성에 대해 공부해봅시다.

 

duration : 효과 시간 1/1000 단위

fromXDelta : x의 시작위치

fromYDelta : T의 시작 위치
toXDelta : X의 끝 위치
toYDelta : Y의 끝 위치

 

첫번쨰로

slide_left_enter.xml -> slide_left_exit.xml 으로 애니메이션이 작용할경우

 

fromXDelta = -100%  -> fromXDelta = 0%

toXDelta = 0% => toXDelta=100%

 

이렇게 왼쪽에서 오른쪽으로 애니메이션이 실행이 되며 Activity가 띄워집니다.

 

이부분을 고려해 오른쪽에서 왼쪽으로, 위에서 아래로 Activity가 나타나는 애니메이션을 만드는게 가능합니다.