在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());
}
在进入的Activity中OnCreate方法中调用setupWindowAnimations方法,代码如下:
private void setupWindowAnimations() {
// 首次进入显示的动画
Visibility visibility = buildEnterTransition(); //褪色
getWindow().setEnterTransition(visibility);
// 重新进入的动画。即第二次进入,可以和首次进入不一样。
// visibility = buildReturnTransition();
// getWindow().setReenterTransition(visibility);
// 启动新 Activity ,此页面退出的动画
visibility = buildReturnTransition(); //滑行
getWindow().setExitTransition(visibility);
// 调用 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);
}
动画设置完成。