**轉載請注明本文出自Cym的博客([http://blog.csdn.net/cym492224103](http://blog.csdn.net/cym492224103)**),謝謝支持!**
**
**
前言

Activity Transition:
提供了三種Transition類型:
**進入**:一個進入的過渡(動畫)決定activity中的所有的視圖怎么進入屏幕。
**退出**:一個退出的過渡(動畫)決定一個activity中的所有視圖怎么退出屏幕。
**共享元素**:一個共享元素過渡(動畫)決定兩個activities之間的過渡,怎么共享(它們)的視圖。
~~~
<span style="font-size:18px;color:#ff6666;">支持這些進入和退出的過渡動畫:</span>
~~~
~~~
<span style="font-size:18px;">explode(分解) –進或出地移動視圖,從屏幕中間
slide(滑動) -進或出地移動視圖,從屏幕邊緣
fade(淡出) –通過改變屏幕上視圖的不透明度達到添加或者移除視圖(的效果)</span>
~~~
**
**
**
~~~
<span style="font-size:18px;color:#ff6666;">在以上動畫基礎上還可以添加還支持共享元素過渡:(以上效果的共享元素效果基于分解動畫基礎上進行)</span>
~~~
它的作用就是共享兩個acitivity種共同的元素,在Android 5.0下支持如下效果:
changeBounds -? 改變目標視圖的布局邊界
changeClipBounds - 裁剪目標視圖邊界
changeTransform - 改變目標視圖的縮放比例和旋轉角度
changeImageTransform - 改變目標圖片的大小和縮放比例

使用步驟:
1.設置動畫(兩種方式):
1.1xml設置
當你定義繼承了material主題樣式時,使用android:windowContentTransitions屬性啟用窗口的內容轉換(效果)。你還可以指定進入、退出、和共享元素的轉換:
~~~
<style name="myTheme" parent="android:Theme.Material">
<!-- 允許使用transitions -->
<item name="android:windowContentTransitions">true</item>
<!-- 指定進入和退出transitions -->
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>
<!-- 指定shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
</style>
~~~
定義transition動畫:
~~~
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<explode/>
<changeBounds/>
<changeTransform/>
<changeClipBounds/>
<changeImageTransform/>
</transitionSet>
~~~
1.2代碼設置
~~~
// 允許使用transitions
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
// 設置一個exit transition
getWindow().setExitTransition(new Explode());//new Slide() new Fade()
~~~
Window.setEnterTransition():設置進入動畫
Window.setExitTransition():設置退出效果
Window.setSharedElementEnterTransition():設置共享元素的進入動畫
Window.setSharedElementExitTransition():設置共享元素的退出動畫
2.Activity跳轉方法:
進入退出動畫跳轉:
~~~
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
~~~
共享元素跳轉:
為了使有一個共享元素的兩個activities間使用過渡動畫:
1.在你的主題中啟用窗口內容過渡
2.在你的主題樣式中指定共享元素的過渡
3.定義你的過渡動畫為XML資源
4.使用android:transitionName屬性給兩個布局中的共享元素指定一個相同的名字(名字一定不要寫錯)
5.使用[ActivityOptions.makeSceneTransitionAnimation()](http://developer.android.com/reference/android/app/ActivityOptions.html#makeSceneTransitionAnimation(android.app.Activity,)?方法
代碼:
~~~
// 共享跳轉
~~~
~~~
intent = new Intent(Transitions.this, Transitions4.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,view,"shareName").toBundle());
~~~
跳轉目標xml:
~~~
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<LinearLayout
android:orientation="horizontal"
android:id="@+id/ll"
android:background="#2faaf3"
android:elevation="2dip"
android:layout_width="fill_parent" android:layout_height="200dp"/>
<TextView
android:id="@+id/btn_test"
android:elevation="8dip"
android:padding="10dip"
android:layout_x="300dip"
android:layout_y="175dip"
android:transitionName="shareName"
android:layout_width="50dp" android:layout_height="50dp" android:background="@drawable/myrect"
android:layout_below="@+id/ll" android:layout_alignParentEnd="true"
android:layout_marginRight="56dp"/>
</AbsoluteLayout>
~~~
如果有多個共享元素:
~~~
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create(view1, "agreedName1"),
Pair.create(view2, "agreedName2"));
~~~
去試試吧~!
- 前言
- ym—— Android 5.0學習之創建模擬器
- ym—— Android 5.0學習之使用Material主題
- ym—— Android 5.0學習之使用Palette
- ym—— Android 5.0學習之AnimatedVectorDrawable
- ym—— Android 5.0學習之ListView升級版RecyclerView
- ym—— Android 5.0學習之CardView
- ym—— Android 5.0學習之Activity過渡動畫
- ym—— Android 5.0學習之定義陰影
- ym—— Android 5.0學習之動畫
- ym—— Android 5.0學習之Tinting和Clipping
- ym—— Android 5.0學習之感想篇(含Demo)