overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
기존에는 위와 같은 간단한 안드로이드 기본 애니메이션을 활용해서
액티비티 전환 애니메이션을 사용했는데, 단순한 Fade in, fade out을 떠나
슬라이드 쇼처럼 위 혹은 옆에서 액티비티 화면이 들어올 수 있도록 하고 싶었고,
서치를 통해 아주 유용한 페이지를 찾았다.
http://wimir-dev.tistory.com/23
참조한 페이지를 통해
프로젝트의 res 폴더에 anim 리소스 폴더를 만들고,
slide_up.xml, slide_down.xml 을 생성
이를 아래와 같이 적용해 응용하였다.
overridePendingTransition(R.anim.slide_down, android.R.anim.fade_out);
불러올 액티비티를 startActivity로 불러주고, 다음 부분에 이렇게 정의해주면
새로 불러오는 액티비티가 위에서 아래로 내려오고, 기존의 액티비티는 점차 어두워지는 fade out 효과를 가지게 된다.
여기서 주목할 점은 커스텀으로 만든 애니메이션인 slide_up, slide_down 파일안의 fromXDelta, toXDelta 값인데,
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="350"
android:fromXDelta="-100%p"
android:toXDelta="0%p"/>
애니메이션 값으로 fromYDelta, toYDelta도 존재하므로 동일한 방식으로
두 파일을 추가해 액티비티를 왼쪽, 혹은 오른쪽에서 밀어오는 효과도 만들 수 있다는 것이다.
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:duration="350"
android:fromYDelta="0%p"
android:toYDelta="-100%p" />
추가로 interpolator를 xml 파일에 설정해 가속하거나 감속하는 등의 옵션은 물론, duration 조절로 애니메이션 수행 시간을
설정도 가능하다.
여기다가 안드로이드 기본 애니메이션 값까지 가져와 화면 슬라이드 및 fade in fade out 까지 함께
적용하는 것도 가능하지 않을까? 하는 생각도 드는데, 나중에 한번 시도해 보는 걸로 해야겠다.
※
추가로 이를 Swipe 뷰를 생성하는 onCreateView 함수 안에서 불러오고자 했는데,
onCreate 안에서 쓰듯이 overridePendingTransition을 적용하면 onCreateView가
static으로 사용하는 PlaceholderFragment 내부에 선언되어 있기 때문에 사용할 수 없었다.
이건 이거대로 또 검색을 했고, stack overflow에서 힌트를 얻을 수 있었다.
어쨌든 질문의 요지는 Activity 클래스를 확장받지 않은 부분에서 overridePendingTransition을 사용하는 법에 대한 것이었는데,
위의 답변과 같이 따로 context를 검사해야 하는지에 대한 의문이 들었고
If문 없이 Activity를 단순히 참조해 비슷하게 수행해보기로 했다.
(getActivity()).overridePendingTransition(R.anim.slide_down, android.R.anim.fade_out);
결과는 성공적이었다. 우선 아무리 다른 class 안에서 특정 작업을 수행한다 해도, 이 클래스가 Activity 클래스 내부에 선언되어 있다면
위와 같이 getActivity를 통해 액티비티에 딸린 작업들을 행할 수 있는 것이었다. :)
'ANDROID > UI - UX' 카테고리의 다른 글
[안드로이드] 각도 표시를 위한 간단한 호 그리기 (0) | 2018.12.03 |
---|---|
[안드로이드] canvas에 선을 따라 원 그리기 (0) | 2018.11.21 |
[안드로이드] PorterDuff.Mode로 적용 가능한 다양한 옵션을 활용하자 (0) | 2018.06.27 |
[안드로이드] 레이아웃에 동적으로 이미지뷰 추가하기 (ScalableLayout을 활용한 경우) (0) | 2018.06.25 |
[안드로이드] Canvas를 활용해 커스텀 뷰에 선 그리기 (drawPath) (0) | 2018.06.20 |