在Activity切換時,我們可以添加控件動畫。
首先是動畫啟動方法,代碼如下:
protected void startActivityWithAnim(Intent i){
final Pair<View, String>[] pairs = TransitionHelper.createSafeTransitionParticipants(this, true);
ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(this,
pairs);
startActivity(i, transitionActivityOptions.toBundle());
}
在進(jìn)入的Activity中OnCreate方法中調(diào)用setupWindowAnimations方法,代碼如下:
private void setupWindowAnimations() {
// 首次進(jìn)入顯示的動畫
Visibility visibility = buildEnterTransition(); //褪色
getWindow().setEnterTransition(visibility);
// 重新進(jìn)入的動畫。即第二次進(jìn)入,可以和首次進(jìn)入不一樣。
// visibility = buildReturnTransition();
// getWindow().setReenterTransition(visibility);
// 啟動新 Activity ,此頁面退出的動畫
visibility = buildReturnTransition(); //滑行
getWindow().setExitTransition(visibility);
// 調(diào)用 finishAfterTransition() 退出時,此頁面退出的動畫
// visibility = buildReturnTransition();
// getWindow().setReturnTransition(visibility);
}
private Visibility buildEnterTransition() {
Fade enterTransition = new Fade();
enterTransition.setDuration(1500);
// 此視圖將不會受到輸入過渡動畫的影響
// enterTransition.excludeTarget(R.id.square_red, true);
return enterTransition;
}
private Visibility buildReturnTransition() {
Visibility visibility = new Slide();
visibility.setDuration(1000);
return visibility;
}
動畫啟動:
findViewById(R.id.btn_transitions).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityWithAnim(new Intent(MainActivity.this,Transition1.class));
}
});
我們還可以使用xml來布局動畫,R.transition.explode:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<explode
android:duration="500"
android:interpolator="@android:interpolator/bounce"/>
</transitionSet>
或者R.transition.slide_from_bottom:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<slide
android:duration="500"
android:slideEdge="bottom"/>
</transitionSet>
在OnCreate中添加setupWindowAnimations方法:
private void setupWindowAnimations() {
Transition transition = TransitionInflater.from(this).inflateTransition(R.transition.explode);
}
getWindow().setEnterTransition(transition);
}
動畫設(shè)置完成。