Activity过渡的五中实现

1.使用overridePendingTransition方法实现Activity跳转动画 
overridePendingTransition方法是Activity中提供的Activity跳转动画方法,通过该方法可以实现Activity跳转时的动画效果 
比如: 
Intent intent =newIntent(MainActivity.this, SecondActivity.class); 
startActivity(intent); 
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_in_left); 
这个函数有两个参数,一个参数是第一个activity进入时的动画,另外一个参数则是第二个activity退出时的动画。

这里需要特别说明的是,关于overridePendingTransition这个函数,有两点需要主意 
1>.它必需紧挨着startActivity()或者finish()函数之后调用” 
2>.它只在android2.0以及以上版本上适用

2、使用style的方式定义Activity的切换动画 
(1)定义Application的theme给主题定义style

<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">

(2)定义具体的AppTheme样式 
其中这里的windowAnimationStyle就是我们定义Activity切换动画的style。而@anim/slide_in_top就是我们定义的动画文件,也就是说通过为Appliation设置style,然后为windowAnimationStyle设置动画文件就可以全局的为Activity的跳转配置动画效果。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:windowAnimationStyle">@style/activityAnim</item>
</style><!-- 使用style方式定义activity切换动画 --><style name="activityAnim"><item name="Android:activityOpenEnterAnimation">@anim/slide_in_top</item><item name="Android:activityOpenExitAnimation">@anim/slide_in_top</item> </style>

而在windowAnimationStyle中存在四种动画:

activityOpenEnterAnimation 
用于设置打开新的Activity并进入新的Activity展示的动画 
activityOpenExitAnimation 
用于设置打开新的Activity并销毁之前的Activity展示的动画 
activityCloseEnterAnimation 
用于设置关闭当前Activity进入上一个Activity展示的动画 
activityCloseExitAnimation 
用于设置关闭当前Activity时展示的动画

案列中只做了两种动画

3.使用ActivityOptions切换动画实现Activity跳转动画

通过overridePendingTransition方法基本上可以满足我们日常中对Activity跳转动画的需求了,但MD风格出来之后,overridePendingTransition这种老旧、生硬的方式怎么能适合我们的MD风格的App呢?ActivityOptions是google在新的sdk中给我们提供了另外一种Activity的过度动画。并且提供了兼容包——ActivityOptionsCompat。ActivityOptionsCompat是一个静态类,提供了相应的Activity跳转动画效果,通过其可以实现不少炫酷的动画效果。 
(1)在跳转的Activity中设置contentFeature

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置contentFeature,可使用切换动画
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Transition explode = TransitionInflater.from(this).inflateTransition(Android.R.transition.explode);
getWindow().setEnterTransition(explode);
setContentView(R.layout.activity_three); }

(2)在startActivity执行跳转逻辑的时候调用startActivity的重写方法,执行ActivityOptions.makeSceneTransitionAnimation方法

/** * 点击按钮,实现Activity的跳转操作 * 通过Android5.0及以上代码的方式实现activity的跳转动画 */
button3.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ThreeActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle()); } });

4,使用ActivityOptions之后内置的动画效果通过style的方式 
这种方式其实就是通过style的方式展示和使用ActivityOptions过度动画,下面是实现通过定义style方式定义过度动画的步骤: 
(1)编写过度动画文件

<explode xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="300" />

首先我们需要在Application项目res目录下新建一个transition目录,然后创建资源文件,然后使用这些系统自带的过渡动画效果,这里设置了过度时长为300ms。

(2)定义style文件,把translation目录下定义好的资源引用进来

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:windowEnterTransition">@transition/activity_explode</item>
<item name="Android:windowExitTransition">@transition/activity_explode</item>
</style>

在Application的style文件中添加,并指定过渡动画效果为我们刚刚定义的过渡动画文件:

<item name="Android:windowEnterTransition">@transition/activity_explode</item>
<item name="Android:windowExitTransition">@transition/activity_explode</item>

(3)执行跳转逻辑 
点击按钮,实现Activity的跳转操作 * 通过Android5.0及以上style的方式实现activity的跳转动画

button4.setOnClickListener(new View.OnClickListener()
{ @Override public void onClick(View v) {/** * 调用ActivityOptions.makeSceneTransitionAnimation实现过度动画 */
Intent intent = new Intent(MainActivity.this, FourActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
}});

(五)使用ActivityOptions动画共享组件的方式实现跳转Activity动画 
这里的共享组件动画效果是指将前面一个Activity的某个子View与后面一个Activity的某个子View之间有过渡效果,即在这种过度效果下实现Activity的跳转操作。那么如何实现两个组件View之间实现过渡效果呢?

(1)定义共享组件 
在Activity a中的button按钮点击transitionName属性:

<Button Android:id="@+id/button5"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/button4"
Android:layout_marginTop="10dp"
Android:layout_marginRight="10dp"
Android:layout_marginLeft="10dp" Android:text="组件过度动画"
Android:background="@color/colorPrimary"
Android:transitionName="shareNames" />

在Activity b的布局文件中为组件定义transitionName属性,这样这两个组件相当于有了过度对应关系,这里需要注意的是这两个组件的transitionName属性的值必须是相同的。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/activity_second"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center_horizontal" Android:orientation="vertical"
Android:transitionName="shareNames" > <TextView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/colorAccent"
Android:layout_marginTop="10dp"
Android:layout_marginBottom="10dp" />
</LinearLayout>

(2)调用startActivity执行跳转动画 
点击按钮,实现Activity的跳转操作 * 通过Android5.0及以上共享组件的方式实现activity的跳转动画

button5.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, FiveActivity.class);
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, button5, "shareNames").toBundle()); }
});

需要说明的是这里调用的ActivityOptions.makeSceneTransitionAnimation方法,传递了三个参数,其中第一个参数为context对象,第二个参数为启动Activity的共享组件,第三个参数为启动Activity的共享组件transitionName属性值。 
这样经过调用之后我们就实现了从Activity a跳转到Activity b的时候a中的组件到b中组件的过度效果。

过渡动画总结

  • overridePendingTransition方法从Android2.0开始,基本上能够覆盖我们activity跳转动画的需求;

  • ActivityOptions API是在Android5.0开始的,可以实现一些炫酷的动画效果,更加符合MD风格;ActivityOptions还可以实现两个Activity组件之间的过度动画;

  • 定义Application style的动画为全局动画,而在java代码中设置的是局部动画

安卓 activity过渡动画相关推荐

  1. android过渡动画软件,安卓P过渡动画下载-安卓P过渡动画 v1.0_手机乐园

    软件简介 安卓P过渡动画是一款xp模块,免费的而且安装包也是超级的小,操作起来比较方便,可以从Android P-jfy中进行模块的分离,通过进行定义每一个关键帧的元素属性值进行复杂动画效果的轻松实现 ...

  2. Android——浅析Activity过渡动画

    Activity过渡动画 前言 分解动画 效果视频 解析 滑动动画 效果视频 解析 淡出动画 效果视频 解析 共享元素 共享单个元素 效果视频 解析 共享多个元素 效果视频 全部代码 第一个Activ ...

  3. android 动画格式下载,安卓p过渡动画文件下载

    安卓p过渡动画模块是一个非常不错的安卓模块文件,可以帮助大家在切换各种页面和应用的时候更加的流程和美观,安装包非常的小巧,几乎不会占用大家的手机空间,而且免费使用.有喜欢的小伙伴可以来体验! 安卓p过 ...

  4. android 官方默认动画,Android动画一:Activity过渡动画详细实现原理

    虽然 Android 5.0 之后推出了新的过渡动画方式,但通常只是用于特定的场合使用,activity.overridePendingTransition() 通用方式的过渡动画还是很常用. 原理分 ...

  5. android 页面过渡动画,Activity过渡动画的实现方法

    1.使用overridePendingTransition方法实现Activity跳转动画 overridePendingTransition方法是Activity中提供的Activity跳转动画方法 ...

  6. Activity过渡动画

    Android5.0之前我们一般会使用overridePendingtransition(int inId, int outId)来给Activity增加一些切换动画,但效果差强人意.Android5 ...

  7. 这样设置过渡动画,让你的Android手机变得更丝滑

    前言 通过合理的设置安卓中过渡动画的缩放速度,可以让安卓手机中窗口的切换更自然.更流畅,操作上感觉更加的丝滑.安卓手机上一般有窗口动画缩放(window_animation_scale).过渡动画缩放 ...

  8. android自定义过渡动画,11.自定义过渡动画

    11.1 问题 应用程序需要自定义Activity切换或Fragment切换时产生的过渡动画. 11.2 解决方案 (API Level 5) 要修改Activity间的过渡动画,可以使用overri ...

  9. android过渡动画旋转,炫酷的Android过渡动画

    [桃花潭水深千尺,不及汪伦送我情] 不知道大家有没有发现,Android版的掘金有下面这个小小动画:点击作者头像跳转到作者的详情页,而作者头像会从当前界面通过动画过渡详情页界面. image 知识贫乏 ...

最新文章

  1. ubuntu 14.04 如何设置静态ip
  2. adb指令禁用软件_三星等安卓手机续航差?禁用部分系统组件后提升明显
  3. 用微型“缝纫机”把芯片无痛“打”进大脑,Elon Musk的脑机帝国拉开序幕!|湾区人工智能...
  4. linux git 搭建 debian,基于Debian Linux搭建Git服务器
  5. c++折线平移算法_【MITA周刊】第十五周:聚类算法
  6. padding和卷积的区别_NiN:使用11卷积层替代全连接层
  7. 开启Spark history server
  8. Opencv中Get2D()与cvSet2D() 的坐标问题
  9. 洛谷OJ P1036 选数
  10. 小米3c路由器拆机_小米AC2350无线路由器拆机-路由器交流
  11. 《HBase权威指南》读书笔记:第一章 简介
  12. C11标准和C++11标准
  13. 《Linux程序设计(第4版)》阅读心得
  14. 2020第六届上海市大学生网络安全大赛线上赛Misc-可乐加冰
  15. 网站是否进行过SEO网站优化?主要就看这三点!
  16. 关于Kaggle入门Titanic的一次简单尝试Part 2 -- Dive into ML
  17. 获取和设置默认打印机
  18. 密钥加密法(指针应用)
  19. 多功能计算机使用教程,腾讯tim使用教程计算机应用知识
  20. mysql8.0.21官网安装步骤_MySQL8.0.21安装步骤及出现问题解决方案

热门文章

  1. vue中设置背景图片的方式
  2. 【Sass-03】Sass官网文档
  3. Apache Camel - 2 - Camel小栗子(File)
  4. 移动端开发必备知识-Hybrid App
  5. 第一站:初识C语言-1
  6. IDEA 中使用 MyBatis Generator 逆向工程出现运行成功但是没有生成相应的文件
  7. ARM Linux驱动开发简介
  8. 【农业发展】趋势与历史机遇
  9. 聚美优品张川:如何搭建秒杀场景下的运维架构
  10. 如何有格调地输出「Hello, World!」?