[Android] 액티비티 전환 시 애니메이션 효과 없애기
앱을 만들다 보면 인스타처럼 누를 때마다 화면 전환효과 없이 바로바로 나오게 하고 싶은 경우가 있다.
이는 프래그먼트를 써서 어느 정도 해결할 수 있지만 액티비티도 내 맘대로 다루기 어려운데 프래그먼트라니?
이런 경우를 생각한 것인진 몰라도 안드로이드는 액티비티의 화면 전환효과를 없앨 수 있는 장치들을 마련해뒀다.
검색하면 방법은 다양하지만 여기선 간단한 방법 2개만 알아본다. 인텐트를 쓰는 법과 액티비티 종료 후 이전 액티비티로 돌아갈 때 호출되는 onPause()를 활용한 방법이다.
1. 인텐트
A 액티비티에서 B 액티비티로 이동한다고 가정한다. 그럼 코드는 이렇게 될 것이다.
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
이 때 A에서 B로 이동할 때 화면 전환효과를 없애고 싶다면, startActivity() 호출 전에 코드 하나를 딱 넣어주면 된다.
Intent intent = new Intent(A.this, B.class);
intent.addFlags(Intent.FLAT_ACTIVITY_NO_ANIMATION);
startActivity(intent);
A와 B에 각각 자신이 만든 액티비티명을 적어놓고 앱을 빌드해서 확인하면 다음 액티비티로 넘어갈 때 화면 전환효과 없이 넘어가는 걸 볼 수 있다.
2. onPause()
B로 넘어갈 때 화면 전환효과 없앴으니 다시 A로 되돌아올 때 보이는 화면 전환효과도 없앨 수 있지 않을까? 가능하다.
액티비티의 생명주기 중 onPause()라는 게 있다. 설명은 생략하고 이 함수의 안에 아래의 함수를 적어주면 된다.
당연한 것이지만 onPause()의 재정의는 B(호출된(이동된) 액티비티)에서 이뤄져야 한다.
onPause() {
super.onPause();
overridePendingTransition(0, 0);
}
onPause()를 재정의하고 안에 볼드체로 적힌 함수 하나만 넣어주면, 이전 화면으로 되돌아갈 때 생기는 화면 전환효과도 없어진다.
onDestroy()에는 넣지 말자. 여기는 로그를 제외한 어떤 함수를 넣어도 별 쓸모가 없다.
부드럽게 넘어간다는 느낌은 들지 않지만 거슬리던 화면 전환효과를 없애는 것이라도 원하는 사람이라면 이 방법을 쓰면 조금은 해결될 것이다.