본문 바로가기
TeamProject/ImadAndroid

DialogFragment 등장 퇴장 애니메이션 적용 [Kotlin]

by 둥글레차35 2024. 12. 24.

슬슬 애니메이션의 적용을 시작하기 위해 간단한 등장과 퇴장 애니메이션을 적용해 보았다.

우선 결과물이다.

 

다이얼로그 등장 시에는 왼쪽에서 오른쪽으로, 퇴장 시에는 오른쪽에서 왼쪽으로 사라진다.

 

우선 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 액티비티가 열리거나 닫힐 때 애니메이션 효과를 적용한다.

화면이 들어오고 나가는 동작할 때 애니메이션 효과를 적용한다.

한 번 만들어 두면 여러 다이얼로그나 액티비티에서 같은 스타일을 재사용할 수 있다.

다른 애니메이션과 결합이 가능하다.

댓글