Activity间切换的动画应用

Activity切换过程中,系统会使用一些默认的动画,显得切换过程不至于太呆板。

在frameworks/base/core/res/res/values下的stlyes.xml文件中有具体的定义各个过程使用哪个动画,如:

<!-- Standard animations for a full-screen window or activity. -->
    <style name="Animation.Activity">
        <item name="activityOpenEnterAnimation">@anim/activity_open_enter</item>
        <item name="activityOpenExitAnimation">@anim/activity_open_exit</item>
        <item name="activityCloseEnterAnimation">@anim/activity_close_enter</item>
        <item name="activityCloseExitAnimation">@anim/activity_close_exit</item>
        <item name="taskOpenEnterAnimation">@anim/task_open_enter</item>
        <item name="taskOpenExitAnimation">@anim/task_open_exit</item>
        <item name="taskCloseEnterAnimation">@anim/task_close_enter</item>
        <item name="taskCloseExitAnimation">@anim/task_close_exit</item>
        <item name="taskToFrontEnterAnimation">@anim/task_open_enter</item>
        <item name="taskToFrontExitAnimation">@anim/task_open_exit</item>
        <item name="taskToBackEnterAnimation">@anim/task_close_enter</item>
        <item name="taskToBackExitAnimation">@anim/task_close_exit</item>
        <item name="wallpaperOpenEnterAnimation">@anim/wallpaper_open_enter</item>
        <item name="wallpaperOpenExitAnimation">@anim/wallpaper_open_exit</item>
        <item name="wallpaperCloseEnterAnimation">@anim/wallpaper_close_enter</item>
        <item name="wallpaperCloseExitAnimation">@anim/wallpaper_close_exit</item>
        <item name="wallpaperIntraOpenEnterAnimation">@anim/wallpaper_intra_open_enter</item>
        <item name="wallpaperIntraOpenExitAnimation">@anim/wallpaper_intra_open_exit</item>
        <item name="wallpaperIntraCloseEnterAnimation">@anim/wallpaper_intra_close_enter</item>
        <item name="wallpaperIntraCloseExitAnimation">@anim/wallpaper_intra_close_exit</item>
        <item name="fragmentOpenEnterAnimation">@animator/fragment_open_enter</item>
        <item name="fragmentOpenExitAnimation">@animator/fragment_open_exit</item>
        <item name="fragmentCloseEnterAnimation">@animator/fragment_close_enter</item>
        <item name="fragmentCloseExitAnimation">@animator/fragment_close_exit</item>
        <item name="fragmentFadeEnterAnimation">@animator/fragment_fade_enter</item>
        <item name="fragmentFadeExitAnimation">@animator/fragment_fade_exit</item>
    </style>
其中,具体的每个动画的定义都在在frameworks/base/core/res/res/anim目录下。

当然,用话可以自己定制个性的切换动画:

1. 通过代码来做:

例如,从Activity A跳转到Activity B,可以在startActivity(intent)后面加上overridePendingTransition(R.anim.anim_in, R.anim.anim_out);来达到效果。

public void overridePendingTransition (int enterAnim, int exitAnim)

Since: API Level 5
Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next.
Parameters —— enterAnim A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
        
exitAnim A resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation.

返回时,从Activity B跳转到Activity A,我们可以在代码中重写onBackPressed()方法,在这个方法中调用finishi()后,调用overridePendingTransition(),从而能体现出需要的动画效果。

2. 通过xml来做,就是通过theme/style方式:

用xml来做比代码更加简洁,这里直接参考网上通用的方法。

在AndroidManifest.xml文件中,对application和activity标签定义theme属性(如果对Application定义了某一个属性,那么会对所有的activity产生影响,当然你可以在activity中覆盖它)。

<application android:theme="@style/new_theme">

然后在values/themes.xml中添加相应的style:

<style name="new_theme">

<item name="android:windowAnimationStyle">@style/custom_animation</item>

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

</style>

在values/styles.xml中

<style name="custom_animation" parent="@android:style/Animation.Activity">

<item name="android:activityOpenEnterAnimation">@anim/open_in</item>

<item name="android:activityOpenExitAnimation">@anim/open_out</item>

<item name="android:activityCloseEnterAnimation">@anim/close_in</item>

<item name="android:activityCloseExitAnimation">@anim/close_out</item>

</style>

这4个item分别代表的含义如下:

Activity A跳转到Activity B时Activity B进入动画;

Activity A跳转到Activity B时Activity A退出动画;

Activity B返回Activity A时Activity A的进入动画

Activity B返回Activity A时ActivityB的退出动画

3. 消除系统默认的切换动画效果:

系统常用的动画效果:

实现淡入淡出的效果

overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);

由左向右滑入的效果

overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);

如果不想使用动画,可以将其删除。

将上面values/styles.xml中的应用动画置为null就ok了

<style name="custom_animation" parent="@android:style/Animation.Activity">

<item name="android:activityOpenEnterAnimation">@null</item>

<item name="android:activityOpenExitAnimation">@null</item>

<item name="android:activityCloseEnterAnimation">@null</item>

<item name="android:activityCloseExitAnimation">@null</item>

</style>

时间: 2024-11-01 01:18:02

Activity间切换的动画应用的相关文章

Android Activity界面切换添加动画特效

在Android 2.0之后有了overridePendingTransition() ,其中里面两个参数,一个是前一个activity的退出两一个activity的进入, Java代码   @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.SplashScreen); new Handler().postD

[Android] Activity间切换,传递数据

前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是intent的基础用法. 原文地址请保留http://www.cnblogs.com/rossoneri/p/3998755.html 先上个图(界面依旧没优化,难看就难看吧): 起始activity,打开图片选择窗口,随便选择一张图片 下面是跳转到裁剪界面 按下crop按钮,退出activity,回到原来

Android Activity界面切换添加动画特效(转)

在Android 2.0之后有了overridePendingTransition() ,其中里面两个参数,一个是前一个activity的退出两一个activity的进入, Java代码   @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.SplashScreen); new Handler().postD

Android:实现两个Activity相互切换而都不走onCreate().(程序更加流畅!)

本文要实现的目的是: 有3个Activity: A,B,C,从A中可以进入B,B中可以进入C,并且B和C之间可能需要多次相互切换,因此不能使用普通的startActivity-finish方式,因为重新创建Activity比较耗时.当这个Activity内容比较多时,重复创建很大的影响了流畅性.(即实现类似于QQ上 选择照片页面-选择相册页面,这两个页面可能多次相互切换,所以不能多次创建) 1.从B进入C或者从C进入B时,均使用startActivity的方式(不使用finish),并为inte

自定义Activity间的切换动画

只有不断找寻机会的人才会及时把握机会. 本讲内容:利用Theme自定义Activity间的切换动画 大多Android系统默认Activity间的动画切换效果为,右边滑入,左边滑出:有时候我们的需求可能是要求所有Activity的切换为淡入淡出的效果,这时候就可能需要改变一下默认的切换风格. 示例效果图:        下面是res/layout/activity_main.xml 布局文件: <RelativeLayout xmlns:android="http://schemas.an

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

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

Android Activity的切换动画(overridePendingTransition)

overridePendingTransition 1.平时Activity的切换是就是从中间弹出来,然后遮盖住之前的Activity.这种效果看到很多后就想给他换成其他的效果,如: 要显示的Acitvity从左边往右的平移进入,被遮盖的Activity从左往右的平移划出. 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity增加了一个方法: pub

Activity的切换动画

Activity在切换或者退出的时候可以自定义动画的,比如AlphaAnimation.TranslateAnimation.ScaleAnimation等自定义的动画.我们在Activity启动的时候或者finish()的时候使用overridePendingTransition()方法可以实现需要的动画.下面举两个例子. 1.淡入淡出的效果 fade_in.xml fade_out.xml Activity1 Activity2 效果如下: 2.左右平移动画 slide_left_in.xm

Activity 设置切换动画

extends://blog.csdn.net/luohaowang320/article/details/42124225 | http://blog.csdn.net/xuewater/article/details/36398803 最近写项目的时候需要用到大量的activity切换动画,于是就用了考虑到了theme中引用style来实现,但是竟然无效,很是郁闷,几经波折,找到了原因,原来是style里面设置了android:windowIsTranslucent这个属性,代码如下: <s