공유 요소 전환은 기본적으로 android에서 지원합니다.
1. 사용 윈도우 내용의 전환
당신의 styles.xml 파일에 창 내용의 전환 사용 :
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:windowContentTransitions">true</item>
...
</style>
2. 공통 전환 이름
공통 할당 할당을 두 레이아웃에서 공유 요소로 전환 이름. android : transitionName 속성을 사용하십시오.
예 : DetailActivity.xml에서
<android.support.v7.widget.CardView
...>
<ImageView
android:id="@+id/ivProfile"
android:transitionName="profile"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="160dp" />
...
</android.support.v7.widget.CardView>
: MainActivity.xml 이드는 어디에 레이아웃 계층 소스 가지거나 및 뷰가 존재 타겟팅 :
<LinearLayout
...>
<ImageView
android:id="@+id/ivProfile"
android:transitionName="profile"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="380dp" />
...
</LinearLayout>
참고 그것은 안드로이드 경우 문제가되지 않는 것을 .
시작 3. 활동
소스로부터 그 공유 요소 및 뷰의 다발을 지정하여 대상 활성을 시작
.
Intent intent = new Intent(this, DetailsActivity.class);
// Pass data object in the bundle and populate details activity.
intent.putExtra(DetailsActivity.EXTRA_CONTACT, contact);
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(this, (View)ivProfile, "profile");
startActivity(intent, options.toBundle());
그게 전부입니다! 전환 이름과 함께 소스보기를 지정하면 원본 계층 구조에서 동일한 전환 이름을 가진 여러보기가 있어도 기본적으로 올바른보기를 선택하여 애니메이션을 시작할 수 있습니다.
두 번째 작업을 마쳤을 때 장면 전환 애니메이션을 되돌리려면 Activity.finish()
대신 Activity.supportFinishAfterTransition()
메서드를 호출하십시오. 또한, 이러한 경우의 툴바/액션 바에서 홈 버튼의 동작을 재정의해야합니다
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
supportFinishAfterTransition();
return true;
}
return super.onOptionsItemSelected(item);
}
4. 여러 공유 요소 때로는
, 당신은 여러 요소를 애니메이션 할 수 있습니다 소스 뷰 계층 구조. 이는 원본 및 대상 레이아웃 XML 파일에서 고유 한 전환 이름을 사용하여 수행 할 수 있습니다.
Intent intent = new Intent(context, DetailsActivity.class);
intent.putExtra(DetailsActivity.EXTRA_CONTACT, contact);
Pair<View, String> p1 = Pair.create((View)ivProfile, "profile");
Pair<View, String> p2 = Pair.create(vPalette, "palette");
Pair<View, String> p3 = Pair.create((View)tvName, "text");
ActivityOptionsCompat options = ActivityOptionsCompat.
makeSceneTransitionAnimation(this, p1, p2, p3);
startActivity(intent, options.toBundle());
참고 : 기본적으로 android.util.Pair가 가져옵니다하지만 우리는 대신 android.support.v4.util.Pair 클래스를 선택합니다.
공유 요소간에 전환을 지나치게 지나치지 않도록주의하십시오. 하나의 응집력 단위를 하나의 화면에서 다른 화면으로 움직이게 할 수는 있지만 (너무 많은 공유 요소를 포함 할 수도 있고 포함하지 않을 수도 있음), 공유 요소가 너무 많으면 정신이 산만 해져서 더 많은 경험을 할 수 있습니다. 안드로이드 L에서
5. 정의 공유 전환 요소는 ChangeBounds, ChangeTransform, ChangeImageTransform 및 ChangeClipBounds의 조합 요소 전이 디폴트 공유. 이것은 가장 일반적인 경우에 효과적입니다. 그러나이 동작을 사용자 정의하거나 사용자 정의 전환을 정의 할 수도 있습니다.
// inside your activity (if you did not enable transitions in your theme)
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
// set an enter transition
getWindow().setEnterTransition(new Explode());
// set an exit transition
getWindow().setExitTransition(new Explode());
: <!-- res/transition/change_image_transform.xml -->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform/>
</transitionSet>
전화 대신 런타임시 Window.requestFeature()
방법 윈도우 내용 천이를 사용하려면, 다음과 같이
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- enable window content transitions -->
<item name="android:windowContentTransitions">true</item>
<!-- specify enter and exit transitions -->
<!-- options are: explode, slide, fade -->
<item name="android:windowEnterTransition">@transition/change_image_transform</item>
<item name="android:windowExitTransition">@transition/change_image_transform</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
</style>
이 예에서 change_image_transform 천이 정의