맞춤 전환을 사용하면 기본 제공 전환 클래스를 사용합니다. 예를 들어, 한 쪽으로 치우친 맞춤 전환을 정의할 수 있습니다. 텍스트 및 입력란의 전경 색상을 회색으로 변경하여 필드가 사용 중지되었음을 나타냅니다. 을 클릭합니다. 이와 같이 변경하면 사용자가 사용 안함으로 설정한 필드를 볼 수 있습니다.
맞춤 전환은 기본 제공 전환 유형 중 하나와 같이 애니메이션을 적용하여 하위 뷰를 만듭니다. 하지만 내장된 전환 유형과 달리 속성 값을 캡처하고 애니메이션을 생성하는 코드를 제공해야 합니다. 애니메이션을 위한 타겟 뷰의 하위 집합을 정의할 수도 있습니다.
이 페이지에서는 속성 값을 캡처하고 애니메이션을 생성하여 만드는 방법을 설명합니다. 맞춤 전환을 만들 수 있습니다.
전환 클래스 확장
맞춤 전환을 만들려면 Transition
클래스를 확장하는 프로젝트에 클래스를 추가하고 다음 스니펫에 나와 있는 함수를 재정의합니다.
Kotlin
class CustomTransition : Transition() { override fun captureStartValues(transitionValues: TransitionValues) {} override fun captureEndValues(transitionValues: TransitionValues) {} override fun createAnimator( sceneRoot: ViewGroup, startValues: TransitionValues?, endValues: TransitionValues? ): Animator? {} }
자바
public class CustomTransition extends Transition { @Override public void captureStartValues(TransitionValues values) {} @Override public void captureEndValues(TransitionValues values) {} @Override public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) {} }
다음 섹션에서는 이 함수를 재정의하는 방법을 설명합니다.
보기 속성 값 캡처
전환 애니메이션은 속성 애니메이션 개요 속성 애니메이션은 지정된 기간 동안 보기 속성을 시작 값에서 종료 값으로 변경 따라서 프레임워크에는 속성을 사용하여 애니메이션을 구성합니다.
그러나 속성 애니메이션에는 일반적으로 모든 보기 속성의 작은 하위 집합만 필요합니다. 값으로 사용됩니다. 예를 들어 색상 애니메이션에는 색상 속성 값이 필요하지만 애니메이션에는 위치 속성 값이 필요합니다. 애니메이션에 필요한 속성 값은 전환 프레임워크가 모든 속성 값을 제공하지는 않음 전환을 확인할 수 있습니다. 대신 프레임워크는 다른 프레임으로의 전환을 허용하는 콜백 함수를 필요한 속성 값만 캡처하여 프레임워크에 저장합니다.
시작 값 캡처
시작 뷰 값을 프레임워크에 전달하려면 다음을 구현합니다.
captureStartValues(transitionValues)
함수를 사용하세요. 프레임워크는 시작 장면에 있는 모든 보기에 사용하도록 이 함수를 호출합니다. 함수
인수는 참조가 포함된 TransitionValues
객체입니다.
뷰, 그리고 원하는 뷰 값을 저장할 수 있는 Map
인스턴스
있습니다. 구현에서 이러한 속성 값을 가져와서
이를 지도에 저장하여 프레임워크에 적용할 수 있습니다.
속성 값의 키가 다른 항목과 충돌하지 않도록 하기 위해
TransitionValues
키를 사용하려면 다음 이름 지정 스키마를 사용합니다.
package_name:transition_name:property_name
다음 스니펫에서는 captureStartValues()
함수의 구현을 보여줍니다.
Kotlin
class CustomTransition : Transition() { // Define a key for storing a property value in // TransitionValues.values with the syntax // package_name:transition_class:property_name to avoid collisions private val PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background" override fun captureStartValues(transitionValues: TransitionValues) { // Call the convenience method captureValues captureValues(transitionValues) } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private fun captureValues(transitionValues: TransitionValues) { // Get a reference to the view val view = transitionValues.view // Store its background property in the values map transitionValues.values[PROPNAME_BACKGROUND] = view.background } ... }
자바
public class CustomTransition extends Transition { // Define a key for storing a property value in // TransitionValues.values with the syntax // package_name:transition_class:property_name to avoid collisions private static final String PROPNAME_BACKGROUND = "com.example.android.customtransition:CustomTransition:background"; @Override public void captureStartValues(TransitionValues transitionValues) { // Call the convenience method captureValues captureValues(transitionValues); } // For the view in transitionValues.view, get the values you // want and put them in transitionValues.values private void captureValues(TransitionValues transitionValues) { // Get a reference to the view View view = transitionValues.view; // Store its background property in the values map transitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground()); } ... }
종료 값 캡처
프레임워크는 captureEndValues(TransitionValues)
함수를 호출합니다.
한 번 더 호출합니다. captureEndValues()
는 다른 모든 면에서 captureStartValues()
와 동일하게 작동합니다.
다음 코드 스니펫에서는 captureEndValues()
함수의 구현을 보여줍니다.
Kotlin
override fun captureEndValues(transitionValues: TransitionValues) { captureValues(transitionValues) }
자바
@Override public void captureEndValues(TransitionValues transitionValues) { captureValues(transitionValues); }
이 예에서 captureStartValues()
및 captureEndValues()
함수는 captureValues()
를 호출하여 값을 검색하고 저장합니다. 뷰 속성
captureValues()
에서 검색하는 값은 동일하지만
시작 장면과 종료 장면이 있습니다. 프레임워크는 시작과 끝을 위한 별도의 맵을 유지합니다.
뷰 상태입니다.
맞춤 애니메이터 만들기
시작 장면의 상태와
엔니메이터를 제공할 수 있도록
createAnimator()
함수를 사용하세요. 프레임워크는 이 함수를 호출할 때 장면 루트 뷰를 전달하고
시작 값과 끝 값이 포함된 TransitionValues
객체
확인할 수 있습니다
프레임워크가 createAnimator()
함수를 호출하는 횟수는 다음에 따라 다릅니다.
시작 장면과 종료 장면 사이에 발생하는 변화를 보여줍니다.
예를 들어 페이드 아웃 또는
맞춤 전환으로 구현된 페이드 인 애니메이션 시작 장면에 다섯 개의 타겟이 있는 경우
종료 장면에서 제거된 3개의 타겟이
장면과 새 타겟을 함께 추가하면 프레임워크는 createAnimator()
를 6번 호출합니다.
세 번의 호출에서 두 장면에 남아 있는 타겟의 페이드 아웃 및 페이드 인을 애니메이션 처리합니다.
객체입니다. 두 번 더 호출하면 종료 장면에서 삭제된 타겟의 페이드 아웃이 애니메이션 처리됩니다. 1개
호출은 종료 장면에서 새 타겟의 페이드인에 애니메이션을 적용합니다.
시작 장면과 종료 장면에 모두 있는 타겟 보기의 경우 프레임워크는
TransitionValues
및 startValues
endValues
인수 시작 지점 또는
종료 장면에서 프레임워크가 TransitionValues
객체를 제공합니다.
를 사용하고 다른 인수에는 null
를 사용합니다.
다음을 만들 때 createAnimator(ViewGroup, TransitionValues, TransitionValues)
함수 구현
맞춤 전환을 만들려면 캡처한 뷰 속성 값을 사용하여 Animator
객체를 만들고 프레임워크로 반환합니다. 구현 예의 경우
ChangeColor
클래스를
CustomTransition 샘플을 참조하세요. 속성 애니메이터에 관한 자세한 내용은 다음을 참조하세요.
속성 애니메이션
맞춤 전환 적용
맞춤 전환은 내장형 전환과 작동 방식이 같습니다. 맞춤 전환을 적용할 수 있습니다. 전환 적용에 설명된 대로 전환 관리자를 사용하여 전환을 수행합니다.