dev/aos

[AOS] 액티비티 애니메이션(Activity Animation)

캄춰 2023. 11. 14. 09:59
728x90
반응형

Activity를 띄우면서 애니메이션 동작이 필요하게 되어서 정리하게 되었다

 

 

액티비티를 띄울 때 사용되는 애니메이션 함수는 

: overridePendingTransition 이라는 함수이며,

 

현재 API34 부터는 Deprecated되어서 다른 방법을 사용하게 된다

: overrideActivityTransition

(안드로이드 폰이 14로 업데이트를 하지 않아서 테스트는 에뮬레이터로 가능)

 

 

아래의 예시는 'alpha' 점점 투명해지거나 투명에서 점점 보여지는 모습이다.

먼저 애니메이션 xml파일을 만든다

 

[resources/anim/fade_in.xml]

: alpha안에서 duration을 정해주어도 되지만, 나는 묶어서 명시하는 것을 선호

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="800">
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0">
    </alpha>
</set>

 

 

[resources/anim/fade_out.xml]

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="800">
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0">
    </alpha>
</set>

 

 

 

동작은 MainActivity에서 SubActivity로 넘어가는 동작이다.

 

[MainActivity]

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)


        binding.btnMoveSubActivity.setOnClickListener {
            val componentName = ComponentName(packageName, SubActivity::class.java.name)
            val intent = Intent()
            intent.component = componentName

            startActivity(intent)
        }
    }

 

 

[SubActivity]

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

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
            overrideActivityTransition(Activity.OVERRIDE_TRANSITION_OPEN, R.anim.fade_in, R.anim.fade_out)
        } else {
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out)  // alpha
            // overridePendingTransition(R.anim.translate_in, R.anim.translate_out)    // translate
        }
    }

 

 

 

MainActivity에서 fade_out을 적용하면 더욱 부드러운 애니메이션을 만들 수 있다.

 

 

 

아래는 내가 난중에 필요하면 사용하기 위해 만든 코드

 


[좌 → 우] translate animation

[resources/anim/translate_left_in]

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

 

 

[우 → 좌] translate animation

[resources/anim/translate_right_in]

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

 

 

[resources/anim/translate_out]

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

 

 

애니메이션 완성 동작

2023.11.14 - [dev/aos] - [AOS] 액티비티 뒤로가기(onBackPressed: Deprecated)

728x90
반응형