以前我们定义activity转场动画都是如下:


Intent intent=new Intent(this,SecondActivity.class);startActivity(intent);overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);

API21以上SDK内置了转场动画,可以用于Activity和Fragment,包结构如下


先看下内置的3种动画效果吧

是不是看起来很炫酷,老实说我没感觉有啥炫酷的,哈哈

这3种动画分别是 explode、slide、fade

现在来学习下怎么使用的吧

前置任务:

在setContentView()之前执行,用于告诉Window页面切换需要使用动画


getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

或者在主题里面添加


true


A  Activity中代码:


switch (view.getId()) {case R.id.tv_explode_transition:     mIntent.setClass(this, TransitionActivity.class);     mIntent.putExtra("transition", "explode");     startActivity(mIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());break;case R.id.tv_slide_transition:     mIntent.setClass(this, TransitionActivity.class);     mIntent.putExtra("transition", "slide");     startActivity(mIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());break;case R.id.tv_fade_transition:     mIntent.setClass(this, TransitionActivity.class);     mIntent.putExtra("transition", "fade");     startActivity(mIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());break;



B Activity中代码:


switch (transition) {  case "explode":       imageView.setBackgroundResource(R.drawable.circle_red);       Explode explode1 = new Explode();       getWindow().setEnterTransition(explode1);  break;  case "slide":       imageView.setBackgroundResource(R.drawable.circle_purple);       Slide slide = new Slide(Gravity.BOTTOM);       slide.setDuration(500L);       getWindow().setEnterTransition(slide);  break;  case "fade":       imageView.setBackgroundResource(R.drawable.circle_blue);       Fade fade = new Fade();       fade.setDuration(1000L);       getWindow().setEnterTransition(fade);  break;}


这样就完事了,是不是很简单哦,

这里还有其他使用方法,效果一样,用XML文件来实现,如图:



<?xml version="1.0" encoding="utf-8"?>


<?xml version="1.0" encoding="utf-8"?>

<?xml version="1.0" encoding="utf-8"?>


然后在Activity中使用


getWindow().setExitTransition(TransitionInflater.from(this).inflateTransition(R.transition.slide));getWindow().setEnterTransition(TransitionInflater.from(this).inflateTransition(R.transition.fade));


当然了,你也可以不使用代码的方式,直接在你使用的主题