android 学习使用Activity转场动画及shareElement

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


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

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

android 学习使用Activity转场动画及shareElement_第1张图片


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

android 学习使用Activity转场动画及shareElement_第2张图片android 学习使用Activity转场动画及shareElement_第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文件来实现,如图:

android 学习使用Activity转场动画及shareElement_第4张图片















然后在Activity中使用


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


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