안녕하세요.

안드로이드의   Activity 간의   전환 animation 설정하는 것은  API Demos 소스에도 있습니다.

그런데,   한가지 이상한 것은   BACK key를  눌러서 돌아오는것을  적용이 안되는거 같더군요. 

activity_trans.png
  

 
예들 들어,   위와 같이  3개의 Activity 가 있고,  


현재  폰의 화면에는  가운데 것(Activity A)이 있구요. 
화면상의  특정 버튼이나 영역을  클릭하면 ,  Activity B 나 C 로 이동을 하고 싶답니다.


< 안드로이드 기본 동작>

   *  새로 나오는 Activity 는  화면의 오른쪽에서 시작해서 왼쪽으로  슬라이딩 효과로 나옵니다.  (3번 화살표 방향)
   *  BACK key를 눌러서  이전 화면으로 가는 경우는   왼쪽에서  오른쪽으로 슬라이딩합니다.  (4번 화살표 방향)



위 그림처럼     왼쪽에  있는 Activity는   안드로이드 기본 동작에  반대로 이동하고 싶답니다.

   * 나올 때는  왼쪽에서 오른쪽으로  슬라이딩을 하고,  ( 1번 화살표 방향) 
   * BACK key 를  눌러서  이전화면으로 갈때는   오른쪽에서  왼쪽으로 슬라이등을 하려고 합니다. ( 2번 화살표 방향) 


 <1번 화살표 방향 설정> 

이것을  제일 간단한데요.      
Activity B를  호출하는 곳에  

    startActivity(i); 
   
   overridePendingTransition(android.R.anim.slide_in_left, R.anim.slide_out_left);


위와 같이   overridePendingTransition() 함수를 이용해서 ,   전환할 효과를 지정해 주면 된답니다.



< BACK key  눌렸을 때의 설정>


그런데  문제는  BACK key 눌렸을 때의 설정을   방법이 없는 것이   도대체가 동작을 하지 않더군요.

우선  BACK key 눌렀을 때는   되돌아 가는  전화효과는 어디서 적용하는가?         못 찾았습니다.

  onCreate() ,  onDestory(),  onResume(),  onPause()  어디에 코드를 추가해도 안됩니다.



여기  게시판에  질문 올렸더니  아즈라엘님이  BACK key를  후킹해서  새로 Activity 를 띄우는 것이 어떨까하고 이야기 하시더군요.

이 방법으로   시도를 해 보았는데요. 


동작을 되지만,    정말 꽁수 같고,  쓸데 없는 코드가 추가되는 부작용이 생기 더군요 ㅡ.ㅡ


Activity B 에  추가된 코드입니다.

@Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
     
      switch (keyCode) {
       case KeyEvent.KEYCODE_BACK:
              return true;
      }
      return super.onKeyDown(keyCode, event);
 }

 @Override
 public boolean onKeyUp(int keyCode, KeyEvent event) {
  
  switch (keyCode) {
   case KeyEvent.KEYCODE_BACK:
    Intent i = new Intent(this,  되돌아갈Activity.class);
       i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
    
       overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
    
               finish();
         return true;
         
  }
        
  return super.onKeyUp(keyCode, event);
 }


안드로이드에  기본으로  없는  Animation  xml 코드


slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
 <translate android:fromXDelta="50%p" android:toXDelta="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
 <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>


slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
 <translate android:fromXDelta="0" android:toXDelta="-50%p"
            android:duration="@android:integer/config_mediumAnimTime"/>
 <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>




이 방법을  이용하시면  Back key 에서도 일관된  Activity 전환 효과를 내실 수는 있습니다만,


Back Key 를  후킹하는 코드를  적절하게 수정해 주셔야 한답니다.


감사합니다.


PS :  아이디어를 제공해 주신 아즈라엘님께 감사드립니다 ^^