zoukankan      html  css  js  c++  java
  • Android5.0之后的页面切换动画

    Android5.0之后给我们开发者剩了好多的事情,为什么这么说呢?还记得刚开始的时候,Android里面的所有的动画都要我们开发者自己来写,现在不需要了,因为5.0之后自带了好多的动画,比如:按钮点击的动画、页面切换的动画(在android5.0之前想都不敢想的)。 
    今天我着重讲一下页面之间的切换,目前5.0系统自带了三种动画方式:Explode(缩放)、Fade(淡入淡出)、Slide(滑动进入)。下面就这三中方式进行介绍一下。 
    在讲解之前,现对于动画的方式进行介绍一下。通常,我们进行页面跳转到时候,进本都是A到B,然后再从B返回到A。 
    这里写图片描述 
    这个过程应该是调用页面A中的 getWindow().setExitTransition(transition);和页面B的getWindow().getEnterTransition(transition); 
    含义就是:从页面A到页面B首先要先退出页面A,然后在进入页面B,所以要先调用页面A的退出动画,然后再去调用页面B点进入动画。 
    这里写图片描述 
    和前面一个的意思相反,从界面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());
        }
    }

    缩放界面:

    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();
        }
    }

    效果: 
    这里写图片描述

  • 相关阅读:
    Java Set 常用集合 HashSet、LinkedHashSet、TreeSet
    旋转数组的最小数字
    Java List 常用集合 ArrayList、LinkedList、Vector
    RestfulApi 学习笔记——内容协商(三)
    RestfulApi 学习笔记——.net core入门操作(二)
    不一样的模板模式(设计模式十一)
    RestfulApi 学习笔记——简单介绍(一)
    oracle 数据库连接
    重学c#系列——索引器(九)
    重新整理计算机组成原理(一)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7376197.html
Copyright © 2011-2022 走看看