Android - Activity切换动画

老婆保佑,代码无BUG

目录

  • 一:5.0之前的实现效果
      1. 实现
  • 二: 5.0之后如何实现
      1. 分解、滑动进入、淡入淡出
      1. 共享元素动画

一:5.0之前的实现效果

Android - Activity切换动画_第1张图片
Untitled4.gif

1. 实现

(1) 添加动画

Android - Activity切换动画_第2张图片
屏幕快照 2017-04-07 下午1.39.54.png

anim_enter



    
    
    
    
    

anim_exit




    
    
    
    
    



back_enter



    
    


back_exit



    
    


(2) 在下面的styles 中添加样式

Android - Activity切换动画_第3张图片
屏幕快照 2017-04-07 下午1.44.20.png
  
    

    
    

(3) 解释说明

android:activityOpenExitAnimation
当我们从 A1 启动 A2 时,A1 从屏幕上消失

android:activityOpenEnterAnimation
当我们从 A1 启动 A2 时,A2 出现在屏幕上

android:activityCloseExitAnimation
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失

android:activityCloseEnterAnimation
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上


二: 5.0之后如何实现

1. 分解、滑动进入、淡入淡出

将原先的跳转改成如下方式

 findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, Act2.class);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
                } else {
                    startActivity(intent);
                }
            }
        });

修改第二个Activity

package com.allens.intent2demo;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.transition.Explode;
import android.transition.Fade;
import android.transition.Slide;
import android.transition.Transition;
import android.view.Window;

/**
 * 描述:
 * 

* Created by allens on 2018/1/3. */ public class Act2 extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // 设置contentFeature,可使用切换动画 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); // init_explode();// 分解 // init_Slide();//滑动进入 init_fade();//淡入淡出 } setContentView(R.layout.activity_2); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private void init_fade() { Transition transition = new Fade().setDuration(200); getWindow().setEnterTransition(transition); getWindow().setExitTransition(transition); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private void init_Slide() { Transition transition = new Slide().setDuration(200); getWindow().setEnterTransition(transition); getWindow().setExitTransition(transition); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) private void init_explode() { Explode explode = new Explode(); explode.setDuration(200); getWindow().setEnterTransition(explode); } }

注意,一定要在加载布局之前设置,判断一下版本号,5.0之后才有

Android - Activity切换动画_第4张图片
分解
Android - Activity切换动画_第5张图片
滑动进入
Android - Activity切换动画_第6张图片
淡入淡出.gif

2. 共享元素动画

修改Activity

package com.allens.intent2demo;

import android.app.ActivityOptions;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Pair;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, Act2.class);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    Pair pair1 = Pair.create(((View) btn), "mybtn");
                    startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, pair1).toBundle());
                } else {
                    startActivity(intent);
                }
            }
        });
    }
}

修改第一个activity 中的 xml

需要共享的元素加上android:transitionName
例如

修改第二个activity中的Button 同样加上

 android:transitionName="mybtn"

如果需要共享多个控件

使用

startSharedElementAnimation(Window window,
            Pair... sharedElements)

例如

 Pair pair1 = Pair.create(((View) btn), "mybtn");
 Pair pair2 = Pair.create(((View) btn), "mybtn1");
 startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, pair1,pair2).toBundle());
Android - Activity切换动画_第7张图片
Untitled11.gif

感谢

http://blog.csdn.net/u012702547/article/details/51289789

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