창고

Activity간의 화면 전환

날아갔나요 2020. 3. 11. 17:19

 

 

overridePendingTransition(int enterAnim, int exitAnim)

Call immediately after one of the flavors of startActivity(android.content.Intent) or finish() to specify an explicit transition animation to perform next.

 

 

1. Activity가 실행, 종료 코드 직후 바로 호출하면된다.

2. 첫번째 파라미터로 보여질 화면의 애니메이션을 입력한다.

3. 두번째 파라미터로 종료되거나 가려질 화면의 애니메이션을 입력한다.

 

 

 

 


 

MainActivity의 왼쪽에서 LeftActivity가 들어온다.

 

 

MainActivity.kt

        btn_main_left.setOnClickListener {
            startActivity(Intent(this@MainActivity, LeftActivity::class.java))
            overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right)
        }

 

1. startActivity 후에 overridePendingTransition을 호출한다.

2. LeftActivity는 왼쪽에서 들어와야 하기 때문에 slide_in_left를 넘겨준다.

3. MainActivity는 오른쪽으로 나가야 하기 때문에 slide_out_right를 넘겨준다.

 

 

 

slide_in_left.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

 

slide_out_right.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="100%p"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

 

 

 

 

 


 

종료시에는 반대로

MainActivity가 오른쪽에서 들어오고 LeftActivity가 왼쪽으로 나가는 것이 자연스럽다.

 

 

LeftActivity.kt

    override fun finish() {
        super.finish()
        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
    }

 

1. finish 후에 overridePendingTransition을 호출한다.

2. MainActivity는 오른쪽에서 들어와야 하기 때문에 slide_in_right를 넘겨준다.

3. LeftActivity는 왼쪽으로 나가야 하기 때문에 slide_out_left를 넘겨준다.

 

 

 

slide_in_right.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

 

slide_out_left.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-100%p"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

 

 

 

 

 


 

위에 예시를 포함한

상황에 맞는 애니메이션을 사용하면 된다.

 

fromXDelta, toXDelta를 fromYDelta, toTDelta로 변경하면 위아래로 이동할 수 있고

android.R.anim.fade_in, android.R.anim.fade_out을 사용할 수도 있다.