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

1.旧转场动画回顾

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

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

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

入场动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:toYDelta="0"android:fromYDelta="100%"android:duration="1500"/>
</set>

出场动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="1500"android:fromYDelta="0"android:toYDelta="-100%"/>
</set>

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

2 5.0之后的转场动画

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

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

1.分解

先来看一张效果图:

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

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

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

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

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

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

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

2.滑动进入

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

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

显示效果如下:

3.淡入淡出

Main2Activity修改代码如下:

getWindow().setEnterTransition(new Fade().setDuration(2000));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的代码了,如下:

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

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

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

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

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

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

以上。

Android5.0之Activity的转场动画相关推荐

  1. Android5.0新特性:全新的动画

    在Material Design设计中,为用户与app交互反馈他们的动作行为和提供了视觉上的连贯性.Material主题为控件和Activity的过渡提供了一些默认的动画,在android L上,允许 ...

  2. Android Activity和Fragment的转场动画

    Activity转场动画 Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的. 这个方法是API Lev ...

  3. android 揭示动画,Android进阶设计 | 使用揭露动画(Reveal Effect)做一个丝滑的Activity转场动画...

    提笔之际(附总体思路) 最近跟几个小伙伴在实践一个项目,考虑到界面效果,我们决定使用揭露动画作为Activity的转场动画. 这里主要是我负责这部分的实现. 话说之前是没接触过的,关于具体的实现跟大体 ...

  4. android 转场动画 监听,Android 中的转场动画及兼容处理

    Android 中的动画有很多,除了在一个界面上使用帧动画.属性动画将一个或多个 View 进行动画处理以外,还可以用于两个界面之间过渡.跳转.在 Android 5.0 之前,我们已经有了 over ...

  5. 腾讯T7手记:Android转场动画的前世今生!

    前一段时间做图片查看器的升级时,在打开图片查看器的时,找不到好的过渡方式. 有位大佬给我推荐了Android最新的Material Motion动画,虽然最终没有给我们的App安排,但给我学习Mate ...

  6. android转场动画效果,Android转场动画

    Android最开始一个activity基本就是一个页面,但是没切换一次页面都要重新切换一个activity,这非常耗性能,并且随着平板的出现,更多时候我们只想切换一个页面的局部区域,因此fragme ...

  7. fragment 淡入淡出_Activity和Fragment的转场动画

    Activity设置转场动画需要在startActivity和finish之后,意为给开启新视图或关闭旧视图添加转场动画. 这是Acitivity通过overridePending方法,设置进和出: ...

  8. 自定义present和dismiss的转场动画

    趁周末闲暇之余,重新写一下present和push的自定义动画. 本来之前有写过一个,因为没有及时整理,到导致一时凌乱,找不到具体在哪了,提醒各位,平时要注意代码的整理和归档,不然到时候重复的代码写了 ...

  9. Android开发之Activity转场动画

    引子 相信开发过iOS的程序员都知道iOS ViewController之间的跳转动画非常多,很酷对不对?这让开发Android的羡慕不已,曾几何时,Android中的Activity跳转是何等的生硬 ...

最新文章

  1. Scala的继承和多态
  2. 解决maven无法下载jar的问题
  3. 14条建议,使你的IT职业生涯更上一层楼
  4. Kotlin 知识梳理(13) 运行时的泛型
  5. 解决SwipeRefreshLayout左右滑动事件冲突的问题
  6. EntityFramework用法探索(三)CodeFirst流畅API
  7. Android之解决java.lang.NoSuchMethodError:android.os.powerManager.isInteractive问题
  8. leetcode 第 216 场周赛 整理
  9. C++ Editbox换行问题
  10. oracle pdb还原为no-cdb,oracle 12c中CDB和PDB的备份还原实验
  11. 苹果官网上架Apple Watch Series 3官翻机:1869元起
  12. 关于focus的概念
  13. JAVA泛型详解2 转载
  14. [翻译]超炫列表动画的实现
  15. 从 FingBugs的错误来看JAVA代码质量
  16. Android闹钟设置的解决方案
  17. java计算机毕业设计南京新东方学校家校通系统源码+系统+数据库+lw文档+mybatis+运行部署
  18. sis最新ip地址2020入口一_【新版教材】2020最新人教版高中生物教材必修一电子课本...
  19. 开发小程序插件如何实现盈利?
  20. 英语六级试卷软件测试,背单词软件_2018年12月英语六级考试真题测试(11)含答案_沪江英语...

热门文章

  1. 软件著作权到底享有哪些权利?
  2. 关于rx,tx或I2C串口不够的问题
  3. 如何将MP4转换为MP3?四种简单易行的方法!
  4. 学习笔记--八数码问题
  5. 渗透工具-白帽安全工程师Kali linux系统
  6. C# 调用c++错误A call to PInvoke function has unbalanced the stack
  7. 质子交换膜燃料电池(PEMFC) Simulink模型 包括静态模型和动态模型(两个独立模型 可计算输出电压、输出功率、效率
  8. python库使用方法查询 app应用_Python爬虫实战(5)获取「最美应用」推荐APP数据...
  9. 用Python写一个用二分法计算函数零点的计算程序
  10. 门德尔松 E小调小提琴协奏曲 个人赏析