[Android] 액티비티 화면전환 애니메이션

2021. 11. 12. 00:00·Android
Android Studio 4.2.2
Android SDK 28
Kotlin 1.5.21

 

 

인텐트로 A 액티비티에서 B 액티비티로 전환할 때 효과(애니메이션)를 커스텀할 수 있다.

애니메이션 리소스

res>anim 폴더에 원하는 애니메이션 xml 파일을 만든다.

hold

250ms 동안 가만히 있기

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

slide_in_left

300ms 동안 화면 밖 왼쪽에서 슬라이딩해서 나타나기

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

slide_in_right

300ms 동안 화면 밖 오른쪽에서 슬라이딩해서 나타나기

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

slide_out_left

300ms 동안 왼쪽으로 슬라이딩해서 사라지기

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

slide_out_right

300ms 동안 오른쪽으로 슬라이딩해서 사라지기

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

 

위 외에도 애니메이션 속성을 이용해 여러 애니메이션을 만들 수 있다.

 

액티비티 화면전환

코드

위 리소스를 활용한 메소드 transActivity()로 액티비티 화면전환 효과를 구현할 수 있다.

화면을 이동하면서 현재 액티비티를 없애고자 한다면 doFinish를 true로 하면 된다.

enum class Direction {
    NONE, BOTH_SLIDE_TO_LEFT, BOTH_SLIDE_TO_RIGHT, ENTER_SLIDE_TO_LEFT, EXIT_SLIDE_TO_RIGHT
}

fun transActivity(direction: Direction, doFinish: Boolean = false) { // 전환 방향 & 액티비티 종료여부
    Log.d(TAG, "transActivity: direction($direction) doFinish($doFinish)")
    if (doFinish) finish() // 종료 선택시 현재 액티비티 종료하기

    when (direction) {
        Direction.NONE -> overridePendingTransition(0, 0) // 전환 애니메이션 無
        Direction.BOTH_SLIDE_TO_LEFT -> overridePendingTransition( // 둘이 함께 왼쪽으로 슬라이딩
            R.anim.slide_in_right,
            R.anim.slide_out_left
        )
        Direction.BOTH_SLIDE_TO_RIGHT -> overridePendingTransition( // 둘이 함께 오른쪽으로 슬라이딩
            R.anim.slide_in_left,
            R.anim.slide_out_right
        )
        Direction.ENTER_SLIDE_TO_LEFT -> overridePendingTransition( // 새로운 뷰만 왼쪽으로 슬라이딩해 나타나기
            R.anim.slide_in_right,
            R.anim.hold
        )
        Direction.EXIT_SLIDE_TO_RIGHT -> overridePendingTransition( // 기존의 뷰만 오른쪽으로 슬라이딩해 사라지기
            R.anim.hold,
            R.anim.slide_out_right
        )
    }
}

예시

startActivity(Intent(this, MainActivity::class.java))
transActivity(Direction.EXIT_SLIDE_TO_RIGHT, true)
transActivity() 메소드는 Application 클래스나 모든 액티비티가 상속 받도록 하는 BaseActivity 클래스 등에서 정의해 사용하면 편리하다.
728x90
저작자표시 비영리 변경금지 (새창열림)

'Android' 카테고리의 다른 글

[Android] 직접 만든 안드로이드 프로젝트 템플릿  (0) 2021.11.18
[Android] 권한 확인 및 요청  (0) 2021.11.15
[Android] 툴바(앱바) 사용하기  (0) 2021.11.09
[Android] 알림 띄우기 (Notification)  (0) 2021.11.06
[Android] 암시적 인텐트 활용하기  (0) 2021.11.03
'Android' 카테고리의 다른 글
  • [Android] 직접 만든 안드로이드 프로젝트 템플릿
  • [Android] 권한 확인 및 요청
  • [Android] 툴바(앱바) 사용하기
  • [Android] 알림 띄우기 (Notification)
Wintinue
Wintinue
201 Created!
  • Wintinue
    Win Record
    Wintinue
    • 📘 Post (68)
      • Android (32)
      • Nest.js (1)
      • NGINX (1)
      • Error (10)
      • AWS (1)
      • Git (3)
      • IT용어 (4)
      • CMD (2)
      • Language (5)
        • PHP (3)
        • Java (2)
      • Project (5)
        • 개인 프로젝트 (3)
        • 팀 프로젝트 (2)
  • 링크

    • Github
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Wintinue
[Android] 액티비티 화면전환 애니메이션
상단으로

티스토리툴바