728x90
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 |