안드로이드 개발 질문/답변
(글 수 45,052)
일단 액티비티 2개가 있습니다. A 그리고 B.
(아래 설명이 글로 쓰다 보니 조금 복잡한데 대충 보시고 간단하게 만들어놓은
첨부파일 한 번만 실행해서 봐주시면 이해하기 쉬울 거에요... 번거로우시겠지만 도움 좀 부탁드립니다.
첨부파일 실행 -> 메뉴버튼 터치 (반투명 액티비티 호출) -> 백키 (메인 액티비티 호출) -> 백키 (어플 종료)
순으로 테스트 하시면 됩니다.)
액티비티 A에서 메뉴버튼을 누르면 액티비티 B를 호출합니다.
이 때 액티비티가 서서히 변하도록 overridePendingTransition 애니메이션이 적용되어있습니다.
(액티비티 B는 배경의 알파값을 조정한 반투명 액티비티입니다.)
이제 액티비티 B에서 백키를 누르면 다시 액티비티 A로 돌아갑니다.
그런데 그냥 돌아가면 overridePendingTransition 애니메이션이 적용되지 않는 것 같아서
백키를 누르면 액티비티 A를 다시 호출하여 애니메이션을 적용하여 돌아가는 것처럼 보이게 합니다.
(단순 백키를 누를 때도 애니메이션 작동할 수 있게 한다면 바로 해결입니다만...)여기서 문제가 발생합니다.
액티비티 B에서 액티비티 A를 호출하여 되돌아가는 것처럼 보이게 할 때
FLAG_ACTIVITY_CLEAR_TOP 플래그를 주게 되면 액티비티 B의 알파값이 없어져서
일시적으로 반투명이 아닌 상태가 됩니다.
그렇다고 FLAG_ACTIVITY_CLEAR_TOP 플래그를 주지 않으면 액티비티 A가 스택에 쌓여서 그런지
액티비티 A로 돌아왔을 때 백키를 세 번 정도는 눌러야 종료가 됩니다.
서서히 변하는 애니메이션과 반투명 액티비티 그리고 정상적인 종료 이 세가지를 모두 만족하려면
어떻게 해야할까요?
오래 고민하고 이래저래 해봤는데 해결을 못하겠어요 ㅠㅠㅠ 도와주세요 ㅠㅠㅠ




우선 fadeout 애니를 하나 만드시구요 (알파: 1 --> 0)
Demo.java --> New.java
startActivity(new Intent(this, New.class));
overridePendingTransition(R.anim.fade, 0);
New.java --> Demo.java
public void onBackPressed()
{
finish();
overridePendingTransition(0, R.anim.fadeout);
}
Demo.java에서
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 해도 상관은 없는데 불필요해 보입니다.
New.java에서 finish() 구현한 건 삭제하시구요.
핵심은
New.java에서
overridePendingTransition 보다 finish를 먼저 호출해주는 것입니다.