머티리얼 디자인 앱의 액티비티 전환은 움직임과 변환을 통해 서로 다른 상태 간의 시각적 연결을 제공한다. 입력 및 종료 전환과 작업 간 공유 요소의 전환에 대한 사용자 정의 애니메이션을 지정할 수 있다.
진입(enter) 전환은 액티비티의 뷰가 장면으로 들어가는 방법을 결정한다. 예를 들어, explode 전환으로 들어갈 때, 뷰가 외부에서 장면으로 들어가 화면 중앙을 향해 날아든다.
종료(exit) 전환은 액티비티의 뷰가 장면으로 들어가는 방법을 결정한다. 예를 들어, explode exit 전환에서, 뷰는 화면을 중앙에서 멀리 벗어난다.
공유 요소(shared elements) 전환은 두 액티비티 사이에 공유되는 관점이 이들 액티비티 사이에 어떻게 전환되는지를 결정한다. 예를 들어, 두 액티비티가 서로 다른 위치와 크기로 동일한 이미지를 갖는 경우, ChangeImageTransform 공유 요소 전환은 이러한 액티비티 사이에서 이미지를 원활하게 변환하고 스케일을 조정한다.
안드로이드에서 진입(enter)와 종료(exit)전환을 지원한다.
- explode - 뷰를 화면 중심으로 이동하거나 벗어나게 한다.
- slide - 뷰를 화면의 가장자리로 이동하거나 벗어나게 한다.
- fade - 화면을 투명, 불투명하게 바꿈으로 화면에서 제거하고 추가한다.
Visibility 클래스를 상속하는 모든 전환은 진입(enter) 또는 종료(exit) 전환을 지원한다.
자세한 내용은 Transition 클래스에 대한 API에서 확인할 수 있다.
안드로이드는 공유 요소(shared elements) 전환도 지원한다.
- ChagneBounds - 대상 뷰의 layout bounds 변경 애니메이션
- ChangeClipBounds - 대상 뷰의 clip bounds 변경 애니메이션
- ChangeTransform - 대상 뷰의 scale 및 rotation의 변화 애니메이션
- ChangeImageTransform - 대상 이미지의 size 및 scale 변경 애니메이션
앱에서 액티비티 전환을 활성화하면, 기본으로 cross-fading 전환이 활성화된다.
액티비티 전환 API는 Android 5.0(API 21)이상에서 사용할 수 있다. 이전 버전의 Android와의 호환성을 유지하려면 API를 호출하기 전에 런타임에 시스템 버전을 확인해야한다.
// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Apply activity transition
} else {
// Swap without transition
}
사용자(Custom) 지정 전환
첫째, 머티리얼 테마에서 상속되는 스타일을 정의할 때 android:windowActivityTransitions 속성을 사용하여 화면 내용 전환을 사용하도록 설정한다. 또한 스타일 정의에서 진입(enter), 종료(exit) 및 공유 요소(shared element)전환을 지정할 수도 있다.
<style name="BaseAppTheme" parent="android:Theme.Material">
<!-- enable window content transitions -->
<item name="android:windowActivityTransitions">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
</style>
이 예에서 chagne)image_transform 전환은 다음과 같이 정의한다.
<!-- res/transition/change_image_transform.xml -->
<!-- (see also Shared Transitions below) -->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform/>
</transitionSet>
ChangeImageTransform 요소는 ChangeImageTransform 클래스에 해당한다.
ChangeImageTransform 클래스는 API level 21부터 추가되었다. 이 전환은 화면 변경 전후에 ImageView의 매트릭스를 캡처하고 전환 중에 애니메이션한다. ChangeImageTransform은 ChangeBounds와 함께 크기, 모양 또는 ImageView를 변경할 수 있다. ScaleType을 사용하여 컨텐츠를 원활하게 애니메이션할 수 있다.
대신 코드에서 창 내용 전환을 활성화하려면 Window.requestFeature()함수를 호출한다.
'Android' 카테고리의 다른 글
[안드로이드] adjustViewBounds 속성 (0) | 2019.11.25 |
---|---|
[안드로이드] "android:transitionName" 속성 위치 따른 변화 (0) | 2019.11.23 |
[안드로이드] 애니메이션2 (0) | 2019.11.20 |
[안드로이드] 애니메이션 (0) | 2019.11.18 |
[안드로이드] 패키지명, Color 변경 (1) | 2019.11.17 |