Android5.0之后的页面切换动画

满堂花醉三千客,一剑霜寒十四洲。这篇文章主要讲述Android5.0之后的页面切换动画相关的知识,希望能为你提供帮助。
android5.0之后给我们开发者剩了好多的事情,为什么这么说呢?还记得刚开始的时候,Android里面的所有的动画都要我们开发者自己来写,现在不需要了,因为5.0之后自带了好多的动画,比如:按钮点击的动画、页面切换的动画(在android5.0之前想都不敢想的)。 
今天我着重讲一下页面之间的切换,目前5.0系统自带了三种动画方式:Explode(缩放)、Fade(淡入淡出)、Slide(滑动进入)。下面就这三中方式进行介绍一下。 
在讲解之前,现对于动画的方式进行介绍一下。通常,我们进行页面跳转到时候,进本都是A到B,然后再从B返回到A。 

Android5.0之后的页面切换动画

文章图片
 
这个过程应该是调用页面A中的 getWindow().setExitTransition(transition); 和页面B的getWindow().getEnterTransition(transition);  
含义就是:从页面A到页面B首先要先退出页面A,然后在进入页面B,所以要先调用页面A的退出动画,然后再去调用页面B点进入动画。 
Android5.0之后的页面切换动画

文章图片
 
和前面一个的意思相反,从界面B退回到界面A,首页要调用页面B的getWindow().setReturnTransition(transition); 然后在调用页面A的getWindow().setReenterTransition(transition);  
含义就是:从页面B到页面A是一个返回的过程,所以要先调用页面B点返回方法,然后在调用重新进入页面A的方法。 
接着看一下代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.btn1).setOnClickListener(this); findViewById(R.id.btn2).setOnClickListener(this); findViewById(R.id.btn3).setOnClickListener(this); }@Override public void onClick(View view) { Transition transition = null; Intent intent = null; switch (view.getId()) { case R.id.btn1: //缩放 intent = new Intent(MainActivity.this,Main2Activity.class); transition = new Explode(); break; case R.id.btn2: //淡入淡出 intent = new Intent(MainActivity.this,Main3Activity.class); transition = new Fade(); break; case R.id.btn3: //滑动 intent = new Intent(MainActivity.this,Main4Activity.class); transition = new Slide(); break; } transition.setDuration(1000); getWindow().setEnterTransition(transition); getWindow().setExitTransition(transition); getWindow().setReenterTransition(transition); getWindow().setReturnTransition(transition); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle()); } }

【Android5.0之后的页面切换动画】缩放界面:
public class Main2Activity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); getWindow().setAllowEnterTransitionOverlap(true); getWindow().setAllowReturnTransitionOverlap(true); Explode explode = new Explode(); explode.setDuration(1000); getWindow().setEnterTransition(explode); getWindow().setExitTransition(explode); setContentView(R.layout.activity_main2); }@Override public void onBackPressed() { super.onBackPressed(); finishAfterTransition(); } }

淡入淡出:
public class Main3Activity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); getWindow().setAllowEnterTransitionOverlap(true); getWindow().setAllowReturnTransitionOverlap(true); Fade fade = new Fade(); fade.setDuration(1000); getWindow().setEnterTransition(fade); getWindow().setReturnTransition(fade); setContentView(R.layout.activity_main3); }@Override public void onBackPressed() { super.onBackPressed(); finishAfterTransition(); } }

滑动:
public class Main4Activity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); getWindow().setAllowEnterTransitionOverlap(true); getWindow().setAllowReturnTransitionOverlap(true); Slide slide = new Slide(); slide.setDuration(1000); getWindow().setReturnTransition(slide); getWindow().setEnterTransition(slide); setContentView(R.layout.activity_main4); }@Override public void onBackPressed() { super.onBackPressed(); finishAfterTransition(); } }

效果: 
Android5.0之后的页面切换动画

文章图片


    推荐阅读