美文网首页Activity
Android 切换 Activity 时的动画

Android 切换 Activity 时的动画

作者: KokutouDa | 来源:发表于2017-05-10 21:35 被阅读393次

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

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

    进出过渡

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

    trasition 动画效果
    explode 从场景的中心进出
    slide 从场景的一边进出,指定 slideEdge 决定哪一边
    fade 在场景中改变透明度的方式
    1. xml形式静态配置动画
    <!-- /res/values/styles.xml --> 
    <!--开启 window content transitions--> 
    <item name="android:windowContentTransitions">true</item> 
    <!--指定进入退出过渡动画--> 
    <item name="android:windowEnterTransition">@transition/explode</item> 
    <item name="android:windowExitTransition">@transition/explode</item> 
    
    <!-- /res/transition/explode.xml --> 
    <transitionSet
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <explode/> 
    </transitionSet>
    
    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());
    
    explode slide fade

    共享元素过渡

    transition 动画效果
    changeBounds 移动、缩小、放大
    changeTransform 缩小、旋转视图
    changeImageTransform 改变大小、缩放图片
    1. 定义一个 transition 资源文件
    <!-- res/transition/shared_element_transition.xml --> 
    <?xml version="1.0" encoding="utf-8"?>
    <changeBounds xmlns:android="http://schemas.android.com/apk/res/android" >
        <arcMotion
            android:minimumHorizontalAngle="0"
            android:minimumVerticalAngle="15"
            android:maximumAngle="90" />
    </changeBounds>
    
    1. 应用到主题中
      动态方法配置
    <!-- /res/values/styles --> 
    <item name="android:windowSharedElementExitTransition">@transition/shared_element_transition</item> 
    <item name="android:windowSharedElementEnterTransition">@transition/shared_element_transition</item> 
    

    代码中动态方法配置

    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
    getWindow().setSharedElementExitTransition();
    getWindow().setSharedElementEnterTransition();
    
    1. 在有相同元素的布局文件中,为相同的视图声明 android:transitionName 属性。(名称相同)
    <!-- activity_main.xml -->
    ...
    <ImageView
              android:id="@+id/image"
              android:transitionName="google"
              ... />
    ...
    
    <!-- activity_another.xml -->
    ...
    <ImageView
              android:transitionName="google"
              android:id="@+id/image"
              ... />
    ...
    

    或者代码中动态配置:调用 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();
            }
        });
      }
      
    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 时的动画

        本文链接:https://www.haomeiwen.com/subject/cqajtxtx.html