翻譯一段android文檔:
首先,在繼承了material主題屬性的style中添加
<item name="android:windowContentTransitions">true</item>
您還可以指定進入,退出動畫, 並在你的style中定義共享單元轉換, 類似這樣:
<style name="BaseAppTheme" parent="android:Theme.Material">
<!-- enable window content transitions -->
<item name="android:windowContentTransitions">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>
在這個例子中 change_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>
同樣的, 你也可以在代碼中用 Window.requestFeature()
方法代替:
// inside your activity (if you did not enable transitions in your theme)
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
// set an exit transition
getWindow().setExitTransition(new Explode());
要在代碼中指定transitions, 需要使用以下方法, 並且傳入一個 transitions 對象
- Window.setEnterTransition()
- Window.setExitTransition()
- Window.setSharedElementEnterTransition()
- Window.setSharedElementExitTransition()
setExitTransition() 和 setSharedElementExitTransition() 方法 定義了退出transition .
setEnterTransition() 和 setSharedElementEnterTransition() 方法定義了進入動畫.
爲了使這兩種動畫同時有效, 你需要爲這兩個Activity
的style
中同時聲明:
<item name="android:windowContentTransitions">true</item>
爲了更快的開始一個進入動畫, 在被啓動的Activity中使用 Window.setAllowEnterTransitionOverlap() 方法, 這可以讓你有一個更鮮活的動畫效果
Start an activity using transitions
如果你啓用了 transitions 並且設置了退出動畫, 則當啓動Activity使用如下代碼 :
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
如果你已經爲第二個Activity定義了進入動畫, 而 當 Activity 啓動時, transition 也同樣是有效的
如果想要 transitions 失效, 則啓動Activity時, 傳入一個爲 null 的 options bundle即可.
Start an activity with a shared element
在兩個Activity中使用元素共享的步驟:
在style中啓用窗口內容過度(即:
<item name="android:windowContentTransitions">true</item>
)在style中指定一個共享元素transition
定義transition的xml資源文件
在共享元素的佈局裏面, 用
android:transitionName
屬性指定一個同樣的名字(名字一定要一樣, 不能打錯)調用
ActivityOptions.makeSceneTransitionAnimation()
方法.
// 接收OnClick事件的view
final View imgContainerView = findViewById(R.id.img_container);
// 這個Activity中的共享元素
final View androidRobotView = findViewById(R.id.image_small);
// 定義一個OnClick監聽
imgContainerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(this, Activity2.class);
// create the transition animation - the images in the layouts
// of both activities are defined with android:transitionName="robot"
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(this, androidRobotView, "robot");
// start the new activity
startActivity(intent, options.toBundle());
}
});
如果共享元素有多個則可以這樣寫:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create(view1, "agreedName1"),
Pair.create(view2, "agreedName2"));
官方說發就是這樣, 下面我們自己來實現下這個效果
demo地址
PS:我手機升級android5.0以後SRC屏幕錄像用不成了, 好用的求錄屏軟件!! - - !