Acitivity 화면 전환 효과에 대해서... 안드로이드 팁

어제의 실수는 오늘의 실수!
-,.-;;;;
이틀전 밤에 밥 먹고 빵먹고 자서 어제 아침 니글거렸는데
어제도 밤에 밥 먹고 빵먹고 잤습니다.... 오늘도 니글거리네요;; ㅠㅠ

흠흠

오늘은 Activity 화면 전환에 대해 알아봅니다.

이렇게 생각을 해보죠.

무언가 버튼을 눌렀을때 다음 화면으로 전환이 된다.

버튼 이벤트가 발생하였을때 다음 Activity로 전환이 된다.

간단하죠? ^^

xml을 열어 버튼을 생성해 줍니다.

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_heigth="wrap_content"
    android:text="움직여요"
/>


이렇게 xml에 중간에 넣어주면 버튼이 생성이 됩니다.
움직여요 라는 버튼이 말이죠

이번엔 자바로 와서 onCreate 안에 버튼 뷰를 등록해 줍니다.

Button button = (Button)findViewById(R.id.button);

그리고 바로 온클릭 리스너를 등록합니다.

button.setOnClickListener (new View.OnClickListener(){
    public void onClick(View v){
        Intent i = new Intent(this.class, nextActivity.class);
        startActivity(i);
    }
}

이렇게 말이죠

여기서 this의 값은 현재의 클래스를 뜻하구요
nextActivity는 아직 생성을 하지 않았습니다.




자 step2 입니다.

nextActivity 클래스를 만들어 보겠습니다.

같은 패키지안에 nextActivity라는 클래스를 생성하시고
layout안에 main2라는 xml파일을 생성하시기 바랍니다.

nextActivity안에서

onCreate아나에 setContentView(R.layout.main2);

setContentView 안의 값을 R.layout.main2로 바꿔주신후에

main2.xml의 내용을 입맛에 맞게 바꾸시면 됩니다.
(text를 넣어 확인해 보는것도 괜찮겠죠 ^^ 하지만 여기선 액티비티 전환에 대해서만 알아봅니다.)

이제 준비가 끝났냐구요?

아직입니다.!

이대로 실행하면 100프로 에러가 뜨고 강제종료가 됩니다. 이유는 Mainfest에 있죠

 AndroidManifest를 열어 <activity android:name=".nextActivity"/>
라고 추가를 해 줍니다.

정말 준비가 끝났죠

에뮬레이터를 실행해 보면 버튼 클릭시 다음 액티비티로 전환 되는 것을 잘 알 수 있습니다.

하지만...

하지만... 두구둥..

저희가 알아보려 했던건 그게 아니었죠? ^^

바로 이 화면 전환시의 효과에 대해 알아보려는 것입니다.




일단 따라해 보세요 !

res 폴더에 anim이라는 폴더를 생성합니다.

이는 애니메이션 관련 파일을 넣는 폴더입니다.

그 폴더안에

fade.xml
hold.xml
zoom_enter.xml
zoom_exit.xml
을 생성합니다.


fade.xml 부터 살펴보죠
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="0.0" android:toAlpha="1.0"
       android:duration="@android:integer/config_longAnimTime" />

이런 값을 추가 해 줍니다.
딱 보니 알파값을 조정하는 것 같죠 ?

hold.xml엔
<translate xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromXDelta="0" android:toXDelta="0"
       android:duration="@android:integer/config_longAnimTime" />

zoom_enter.xml엔
<set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator">
    <scale android:fromXScale="2.0" android:toXScale="1.0"
           android:fromYScale="2.0" android:toYScale="1.0"
           android:pivotX="50%p" android:pivotY="50%p"
           android:duration="@android:integer/config_mediumAnimTime" />
</set>

zoom_exit.xml엔
<set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:zAdjustment="top">
    <scale android:fromXScale="1.0" android:toXScale=".5"
           android:fromYScale="1.0" android:toYScale=".5"
           android:pivotX="50%p" android:pivotY="50%p"
           android:duration="@android:integer/config_mediumAnimTime" />
    <alpha android:fromAlpha="1.0" android:toAlpha="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
</set>

이런 값을 넣어줍니다.

이제 다-----시  처음의 자바파일로 돌아옵니다.

자바파일에 보면 온클릭 리스너를 선언했던 것이 보이실 겁니다.

그 안에 (onClick(View v){ 안에)

overridePendingTransition(R.anim.fade, R.anim.hold);

값을 넣어 줍니다.

그리고 실행을 해보시면???


띠용!

부드러운 화면전환이 보이시나요? ^^

다음입니다.

그걸 지우시고 이번엔

overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);

이라고 넣어보세요.

줌인 줌아웃되는 것이 보이시나요 ^^


마무리 입니다.

overridePendingTransition은 int값을 받습니다.

xml에서 생성해 R.java에 등록된 모든 것들은 주소값을 받고

저희는 그 주소값을 갖고 편하게 사용을 하면 되겠습니다.



실제 화면전환을 하는 효과는

xml 4개 생성과
java에서 코딩 1줄 이 추가될 뿐이죠

^^

그럼 이제 그만 빼빼로 데이에 강쉪은 물러가겠습니다.

다음에 봐요 ----

덧글

댓글 입력 영역