Android5.0之Activity的转场动画

Activity的转场动画很早就有,但是太过于单调,样式也不好看,于是Google在Android5.0之后,又推出的新的转场动画,效果还是非常炫的,今天我们一起来看一下。

1.旧转场动画回顾

首先我们还是先来看看在5.0之前如果我们想要在启动Activity时使用动画该怎么做呢?

[java] view plain copy print?

  1. startActivity(new Intent(this, Main3Activity.class));
  2. overridePendingTransition(R.anim.in,R.anim.out);

对应的入场和出场动画就是两个补间动画,如下:

入场动画:

[java] view plain copy print?

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <translate
  4. android:toYDelta="0"
  5. android:fromYDelta="100%"
  6. android:duration="1500"/>
  7. </set>

出场动画:

[java] view plain copy print?

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <translate
  4. android:duration="1500"
  5. android:fromYDelta="0"
  6. android:toYDelta="-100%"/>
  7. </set>

这种动画是针对整个Activity而言的,无法设置Activity中元素的入场/出场动画。如果想要设置Activity中元素的出场/入场动画可以通过设置布局上元素的元素的出/入场动画来实现。但这无疑增加了工作量。

2 5.0之后的转场动画

Android5.0之后Activity的出入场动画总体上来说可以分为两种,一种就是分解、滑动进入、淡入淡出,另外一种就是共享元素动画,下面我们分别就这两种动画进行说明。

2.1 分解、滑动进入、淡入淡出

1.分解

先来看一张效果图:

就是这样一种效果,那我们接下来看看这种效果要怎么实现。

首先,把之前启动Activity的代码改成下面的写法:

[java] view plain copy print?

  1. startActivity(new Intent(this, Main2Activity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

添加完成之后,在Main2Activity中设置该Activity的进出场动画即可:

[java] view plain copy print?

  1. getWindow().setEnterTransition(new Explode().setDuration(2000));
  2. getWindow().setExitTransition(new Explode().setDuration(2000));

OK,就是这么简单,哦,对了,大家一定要记得在styles.xml文件中添加下面一行代码,表示激活Activity中元素的过渡效果:

[java] view plain copy print?

  1. <item name="android:windowContentTransitions">true</item>

2.滑动进入

有了上面的步骤,再设置滑动进入就很简单了,只需要修改Main2Activity中的两行代码即可:

[java] view plain copy print?

  1. getWindow().setEnterTransition(new Slide().setDuration(2000));
  2. getWindow().setExitTransition(new Slide().setDuration(2000));

显示效果如下:

3.淡入淡出

Main2Activity修改代码如下:

[java] view plain copy print?

  1. getWindow().setEnterTransition(new Fade().setDuration(2000));
  2. getWindow().setExitTransition(new Fade().setDuration(2000));

显示效果如下:

2.2 共享元素动画

共享元素动画是一个非常神奇的东东,我们先来看看效果:

可能这个Gif动画还不太清晰,我再来解释一下,在MainActivity和Main2Activity里边都有一个Button,只不过一个大一个小,从MainActivity跳转到Main2Activity时,我并没有感觉到Activity的跳转,只是觉得好像第一个页面的Button放大了,同理,当我从第二个页面回到第一个页面时,也好像Button变小了。OK,这就是我们的Activity共享元素。

当两个Activity中有同一个控件的时候,我们便可以采用共享元素动画。

使用共享元素动画的时候,我们需要首先给MainActivity和Main2Activity中的两个button分别添加Android:transitionName="mybtn"属性,并且该属性的值要相同,这样系统才知道这两个控件是共享元素。设置完成之后,接下来就是启动Activity的代码了,如下:

[java] view plain copy print?

  1. startActivity(new Intent(this,Main2Activity.class), ActivityOptions.makeSceneTransitionAnimation(this,view,"mybtn").toBundle());

还是上面那种启动方式的重载方法,只不过这里多了两个参数,view表示MainActivity中的共享元素(就是那个Button),第二个参数表示布局文件中transitionAnimation属性的值。OK,就这么简单。

这时有的筒子可能有疑问了,那我如果两个页面中有多个共享元素该怎么办呢?简单,android:transitionName属性还像上面一样设置,然后在启动Activity时我们可以通过Pair.create方法来设置多个共享元素,如下:

[java] view plain copy print?

  1. startActivity(new Intent(this, Main2Activity.class),
  2. ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(((View) iv1),"myiv"), create(((View) textView),"mytv")).toBundle());

Pair.create方法中有两个参数,第一个是共享元素的实例(注意要是View类型),第二个参数是该View的transitionAnimation属性的值。

就这么简单,筒子们快速尝试一下吧。

以上。

时间: 2024-11-05 04:21:39

Android5.0之Activity的转场动画的相关文章

Activity Fragment转场动画

Activity转场动画 先介绍个动画的好例子:https://github.com/lgvalle/Material-Animations Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的. 这个方法是API Level 5 加入的. 这个方法在startActivity(Intent) or finish()之后被调用,指定接下来的这个转场动画. 方法的第一个参数:enterAnim,是新的Ac

activity fragment 转场动画

v4 fragment fragmentTransaction.setCustomAnimations(R.anim.push_left_in, R.anim.push_left_out, R.anim.push_left_in, R.anim.push_left_out); fragment 入栈时,先从右边100%移动到左边0% 出栈时,从左边0% 移动到左外面-100% 第一个和第四个是控制进出的动画,中间两个不知表达什么,一直没搞明白 中间两个动画不起作用 4个item分别代表 Acti

[转]Android Activity和Fragment的转场动画

Android Activity和Fragment的转场动画 Activity转场动画 Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的. 这个方法是API Level 5 加入的. 这个方法在startActivity(Intent) or finish()之后被调用,指定接下来的这个转场动画. 方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID: 第二

Android Activity和Fragment的转场动画

Activity转场动画 Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的. 这个方法是API Level 5 加入的. 这个方法在startActivity(Intent) or finish()之后被调用,指定接下来的这个转场动画. 方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID: 第二个参数exitAnim,是旧的Activity(当前的Acti

实现Android5.0过渡动画兼容库

Android5.0之后为我们提供了许多炫酷的界面过渡效果,其中共享元素过渡也是很有亮点的一个效果,但这个效果只能在Android5.0之后使用,那今天我们就来将共享元素过渡效果兼容到Android4.0,让5.0之前的手机也可以体验这么炫酷的效果吧. A transition animation compatible Library. 兼容Android5.0之后转场动画至Android4.0. github地址:https://github.com/zhangke3016/Translati

实现Activity间的共享控件转场动画

实现Activity间的共享控件转场动画 字数1210 阅读1936 评论9 喜欢35 Lollipop中有shared_element可以进行元素在activity之间进行共享,网上已经有很多介绍了,然而目前还有大量的kitkat设备,所以说啊,兼容更重要. 如下的方法,可以实现在旧的手机上实现动画效果.采用了类似于豌豆荚的开眼项目使用的技术.github上可能有在5.0以下的兼容包,但是个人并不推荐使用第三方的UI工具. Preview 实现原理 最近逛业界良心酷安网,发现了豌豆荚的一款叫做

android5.0 Activity transition

在android5.0中增加了一个activity之间的国度动画,效果较之前自己写的好很多,在5.0之前,如果想要实现activity之间的跳转动画,则需要使用activity的 Activity.overridePendingTransition方法,并且自定义一个动画,但是在5.0当中google已经为我们提供了一下动画: 1. Explode 2. Fade 3. Slide 4. ChangeTransform 5. ChangeClipBounds 6. ChangeBounds 实现

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

Android5.0之后给我们开发者剩了好多的事情,为什么这么说呢?还记得刚开始的时候,Android里面的所有的动画都要我们开发者自己来写,现在不需要了,因为5.0之后自带了好多的动画,比如:按钮点击的动画.页面切换的动画(在android5.0之前想都不敢想的). 今天我着重讲一下页面之间的切换,目前5.0系统自带了三种动画方式:Explode(缩放).Fade(淡入淡出).Slide(滑动进入).下面就这三中方式进行介绍一下. 在讲解之前,现对于动画的方式进行介绍一下.通常,我们进行页面跳

一个Activity掌握Android5.0新控件 (转)

原文地址:http://blog.csdn.net/lavor_zl/article/details/51279386 谷歌在推出Android5.0的同时推出了一些新控件,Android5.0中最常用的新控件有下面5种. 1. CardView(卡片视图) CardView顾名思义是卡片视图,它继承FrameLayout.它是一个带圆角的背景和阴影FrameLayout.CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为容器使用. Ca