뒤로가기를 눌렀을 때 호출되는 onBackPressed함수가 API33부터 Deprecated되었다
액티비티가 꺼지면서 애니메이션을 적용하려고 하였고, 정리가 필요하였다.
2023.11.14 - [dev/aos] - [AOS] 액티비티 애니메이션(Activity Animation)
[AOS] 액티비티 애니메이션(Activity Animation)
Activity를 띄우면서 애니메이션 동작이 필요하게 되어서 정리하게 되었다 액티비티를 띄울 때 사용되는 애니메이션 함수는 : overridePendingTransition 이라는 함수이며, 현재 API34 부터는 Deprecated되어
cavedwellers.co.kr
이전 액티비티 애니메이션을 띄우는 것이 아닌 이제 종료시키는 동작을 할 것이다.
먼저, API33이상부터 적용할 onBackPressedCallback 구현
(참고로 onBackPressedCallback은 대응하려고 만들어진 것이 아닌 원래 있었던 콜백 함수)
: finish는 뒤로가기 동작을 하기 위함
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
private val onBackPressedCallback = object: OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
NLog.d("onBackPressedCallback..")
finish()
}
}
[콜백 인스턴스 등록]
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
NLog.d("onCreate..")
setContentView(R.layout.activity_sub)
...
// onBackPressed
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
}
애니메이션 동작은 'translate'로 이동을 시키는 동작
[좌 → 우] 로 액티비티가 종료되면서 동작
[resources/anim/translate_none]
<?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>
[resources/anim/translate_right_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="100%" />
</set>
보통 onBackPressed에 overridePendingTransition을 하지만,
모든 버전에서 유연하게 동작시키기 위해서 'finish'함수를 재정의 하였다.
'뒤로가기' 버튼 UI클릭시 로그
onCreate..
finish..
onBackPressed..
onBackPressed 함수
override fun onBackPressed() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
super.onBackPressed()
NLog.d("onBackPressed..")
}
}
finish함수
override fun finish() {
super.finish()
NLog.d("finish..")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
overrideActivityTransition(Activity.OVERRIDE_TRANSITION_CLOSE, R.anim.translate_none, R.anim.translate_right_out)
} else {
overridePendingTransition(R.anim.translate_none, R.anim.translate_right_out)
}
}

'dev > aos' 카테고리의 다른 글
[AOS] 빌더 패턴 Builder Pattern 작성 (0) | 2023.11.17 |
---|---|
[AOS] lateinit 초기화 여부 확인 (0) | 2023.11.16 |
[AOS] 액티비티 애니메이션(Activity Animation) (0) | 2023.11.14 |
[AOS] AnimationSet 만들기 (0) | 2023.11.13 |
[AOS] ImageButton에 버튼 클릭 효과 넣기 (0) | 2023.11.13 |