Android 切换 Activity 时的动画

过渡形式启动一个 Activity:
ActivityOptions 类中有很多切换 Activity 相关的过渡动画,场景切换、放大动画、揭露动画、自定义动画等。
用法:

options = ActivityOptions.makexx();    
startActivity(intent, options.toBundle());

进出过渡

有三个类,explodeslidefade ,都继承 Visibility,而 Visibility 继承 Transition 。

trasition 动画效果
explode 从场景的中心进出
slide 从场景的一边进出,指定 slideEdge 决定哪一边
fade 在场景中改变透明度的方式
  1. xml形式静态配置动画
 
 
true 
 
@transition/explode 
@transition/explode 

 
 
 

  1. 代码中动态配置动画效果
// /java/…/MainActivity.java    
//开启 window content transitions 
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 
//指定进入退出过渡动画 
//为了完整的效果,在被调用的 Activity 中也要启用 window content transitions 
getWindow().setEnterTransition(new Explode()); 
getWindow().setExitTransition(new Explode());
Android 切换 Activity 时的动画_第1张图片
explode
Android 切换 Activity 时的动画_第2张图片
slide
Android 切换 Activity 时的动画_第3张图片
fade

共享元素过渡

transition 动画效果
changeBounds 移动、缩小、放大
changeTransform 缩小、旋转视图
changeImageTransform 改变大小、缩放图片
  1. 定义一个 transition 资源文件
 


    

  1. 应用到主题中
    动态方法配置
 
@transition/shared_element_transition 
@transition/shared_element_transition 

代码中动态方法配置

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setSharedElementExitTransition();
getWindow().setSharedElementEnterTransition();
  1. 在有相同元素的布局文件中,为相同的视图声明 android:transitionName 属性。(名称相同)

...

...


...

...

或者代码中动态配置:调用 View.setTransitionName()

  1. 使用 ActivityOptions.makeSceneTransitionAnimation() 方法应用过渡动画

     // MainActivity.java
     private ImageView image;
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
    
         image = (ImageView) findViewById(R.id.image);
         findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
             Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
                 ActivityOptions options = ActivityOptions.
                       makeSceneTransitionAnimation(MainActivity.this, image, "google");
               startActivity(intent,options.toBundle());
         }
       });
     }
       
     // SecondActivity.java
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_another);
         
         findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             //使用这个方法代替 finishActivity(),确保 Transition 完成之后再结束 Activity
             finishAfterTransition();
          }
      });
    }
    
Android 切换 Activity 时的动画_第4张图片
shared_element

有多个共享元素时

使用 ActivityOptions.makeSceneTransitionAnimation(activity, pair…) 方法:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, 
Pair.create((View) image, "google"), 
Pair.create((View) button, "btnSwitch"));

参考 https://developer.android.com/training/material/animations.html

你可能感兴趣的:(Android 切换 Activity 时的动画)