슬슬 애니메이션의 적용을 시작하기 위해 간단한 등장과 퇴장 애니메이션을 적용해 보았다.
우선 결과물이다.
다이얼로그 등장 시에는 왼쪽에서 오른쪽으로, 퇴장 시에는 오른쪽에서 왼쪽으로 사라진다.
우선 res -> anim 파일 생성후 리소스 파일을 2개 생성한다.
하나는 등장 애니메이션, 또 다른 하나는 퇴장 애니메이션이다.
1. 애니메이션 리소스 파일
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromXDelta="100%"
android:toXDelta="0%"
android:interpolator="@android:anim/decelerate_interpolator" />
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromXDelta="0%"
android:toXDelta="100%"
android:interpolator="@android:anim/accelerate_interpolator" />
2. 스타일 지정
theme -> style 에서 미리 만들어 놓은 애니메이션 리소스를 아이템으로 지정한다.
스타일 네임을 사용할 이름으로 만들고 밑에 아이템을 지정한다.
그 밑의 아이템의 순서는 중요하지 않다.
- item name을 통해 어떤 상황에 작동할지 명시한다.
- android:windowEnterAnimation 다이얼로그가 화면에 등장할 때 적용되는 애니메이션
- android:windowEixtAnimation 다이얼로그가 화면에서 사라질 때 적용되는 애니메이션
- android:windowCloseEnterAnimation 다이얼로그가 닫히면서 다른 UI가 등장할 때 적용되는 애니메이션
- android:windowCloseExitAnimation 다이얼로그가 닫히고 사라질때 적용되는 애니메이션
<style name="DialogAnimation">
<item name="android:windowEnterAnimation">@anim/slide_in_left</item>
<item name="android:windowExitAnimation">@anim/slide_out_right</item>
</style>
3. 적용
마지막으로 해당 화면이 열릴 때 해당 애니메이션을 적용하도록 setWindowAnimation()에 지정한 스타일을 사용하면 끝
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState)
dialog.window?.apply {
setWindowAnimations(R.style.DialogAnimation)
}
return dialog
}
정리
setWindowAnimation()은 다이얼로그나 액티비티의 화면 전환 애니메이션을 설정하는 데 사용된다.
인자 값은 애니메이션 스타일 리소스를 받는다.
다이얼로그 or 액티비티가 열리거나 닫힐 때 애니메이션 효과를 적용한다.
화면이 들어오고 나가는 동작할 때 애니메이션 효과를 적용한다.
한 번 만들어 두면 여러 다이얼로그나 액티비티에서 같은 스타일을 재사용할 수 있다.
다른 애니메이션과 결합이 가능하다.
'TeamProject > ImadAndroid' 카테고리의 다른 글
| 안드로이드 UI Lag 해결 (0) | 2025.02.08 |
|---|---|
| [android] 텍스트 뷰 이미지 추가 (0) | 2025.02.05 |
| 안드로이드 팝업 메뉴에 이미지 추가 [Kotlin] (2) | 2024.12.20 |
| 이미지가 가로로 로드 되는 경우 (0) | 2024.08.09 |
| Fragment에서 menuInflater 사용 (0) | 2024.07.04 |
댓글