android:theme="@style/AppTheme.main" <style name="AppTheme.main" parent="android:Theme.Material.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
<style name="AppTheme.Details" parent="android:Theme.Material.Light.NoActionBar"> <!-- 指定進入和退出transitions --> <item name="android:windowEnterTransition">@transition/explode</item> <item name="android:windowExitTransition">@transition/explode</item> <item name="android:windowEnterTransition">@transition/details_window_enter_transition</item> <item name="android:windowReturnTransition">@transition/details_window_return_transition</item> </style>
<?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android" android:transitionOrdering="together" android:duration="500"> <fade> <targets> <target android:excludeId="@android:id/statusBarBackground" /> <target android:excludeId="@android:id/navigationBarBackground" /> </targets> </fade> <slide android:slideEdge="top"> <targets> <target android:targetId="@id/details_header_container" /> </targets> </slide> <slide android:slideEdge="bottom"> <targets> <target android:targetId="@id/details_text_container" /> </targets> </slide> </transitionSet>
第一個Activityandroid
ImageView mAlbumImage = (ImageView) itemView.findViewById(R.id.main_card_album_image);
mAlbumImage.setTransitionName("Pablo Honey");ide
第二個Activitypost
ImageView mAlbumImage = (ImageView) rootView.findViewById(R.id.details_album_image); mAlbumImage.setTransitionName("Pablo Honey");
也可以使用標籤設置動畫
android:transitionName="shareName"
一、一個共享元素 startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this,mAlbumImage, mAlbumImage.getTransitionName()).toBundle()); 二、多個共享元素 ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view1, "agreedName1"), Pair.create(view2, "agreedName2"));
第一個界面 在Activity 的onCreate()中調用postponeEnterTransition(),暫時阻止啓動共享元素 Transition。 第二個界面 在共享元素準備好後調用 startPostponedEnterTransition來恢復過渡效果。 mAlbumImage.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { mAlbumImage.getViewTreeObserver().removeOnPreDrawListener(this); getActivity().startPostponedEnterTransition(); return true; } }); 以延遲共享元素返回 Transition @Override public void onActivityReenter(int requestCode, Intent data) { super.onActivityReenter(requestCode, data); postponeEnterTransition(); mRecyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override public boolean onPreDraw() { mRecyclerView.getViewTreeObserver().removeOnPreDrawListener(this); // TODO: figure out why it is necessary to request layout here in order to get a smooth transition. mRecyclerView.requestLayout(); startPostponedEnterTransition(); return true; } }); }