Android Activity切换动画

分类:Android基础387人阅读评论(0)收藏举报

首先说明以下,activity切换动画有两种方式,开发人员可以根据自己的需要自己选择。
一、在startactivity之后调用overridePendingTransition(int enterAnim, int outAnim)这个方法。

在Android2.0之后,当程序在Activity之间进行切换时,可以添加切换动画的。其实添加Activity切换动画只是很简单的调用一个api函数:overridePendingTransition(int enterAnim, int outAnim),两个参数分别指向两个定义动画的xml文件资源,下面先用一段简单的代码说明该函数的使用方法。
假设有两个Activity,分别为A和B。
当在A中启动B时,可以使用如下方式添加动画:
首先在xml中定义两个动画,放在R.anim文件夹目录下:

right_left_out.xml:<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="0"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="-100%p"android:toYDelta="0"/></set>right_left_in.xml:<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="100%p"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="0"android:toYDelta="0"/></set>


然后在A中启动B时,就可以利用这两个动画定义文件让A和B的切换过程产生动画下过,如下代码片段演示:

Intentintent=newIntent(A.this,B.class);A.this.startActivity(intent);//参数一是下一个Activity的进入动画,参数二是当前Activity的退出动画overridePendingTransition(R.anim.right_left_in,R.anim.right_left_out);

在B中返回A时,可以使用如下动画:

left_right_out.xml:<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="0"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="100%p"android:toYDelta="0"/></set>left_right_in.xml:<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="-100%p"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="0"android:toYDelta="0"/></set>

代码片段:
B.this.finish();
overridePendingTransition(R.anim.left_right_in, R.anim.left_right.out);
如果希望在用户按返回键是从B退回到A时也能够有动画效果,则需要在B中截取按钮事件,并手动结束当前Activity。代码片段如下:

@OverridepublicbooleanonKeyUp(intkeyCode,KeyEventevent){if(keyCode==KeyEvent.KEYCODE_BACK){B.this.finish();overridePendingTransition(R.anim.left_right_in,R.anim.left_right_out);returntrue;}returnsuper.onKeyUp(keyCode,event);}

这个方法比较简单吧,只用调用一个api就行了。但是如果activity比较多,可以让所有的activity都继承一个baseactivity,然后继承baseactivity里面的startactivity和finish方法,切换动画效果都在baseactivity里面完成就行了,这也是比较简单的,代码就不列了。

二、使用theme主题来设置切换动画
我们知道,在Manifest文件中声明Activity时,可以通过android:theme属性设置Activity的主题。主题中定义了关于Activity外观的很多特性。同时,主题中还可以定义Activity的切换动画。通过主题的形式定义的Activity切换动画,甚至可以超越API的限制,在2.0以下的系统版本中依然能够设置Activity切换动画。
下面就一个简单的例子说明怎么定义包含Activity切换动画的主题。
首先,我们先看一下包含动画的主题是怎么定义的。在R.values文件夹中新建一个style.xml的文件,在其中插入一个<style />节点,声明一个主题,代码如下:

R.values.style:<stylename="Activity.Theme"parent="@android:style/Theme.NoTitleBar"><itemname="android:windowAnimationStyle">@style/anim_activity</item></style>

可以看到,以上主题的父主题是@android:style/Theme.NoTitleBar, 就是继承自系统主题的大部分属性。
其中有一个"android:windowAnimationStyle"属性是由我们自定义的,定位的位置同样在R.values.style文件中。代码如下:

<stylename="anim_activity"mce_bogus="1"parent="@android:style/Animation.Activity"><itemname="android:activityOpenEnterAnimation">@anim/activity_open_in_anim</item><itemname="android:activityOpenExitAnimation">@anim/activity_open_out_anim</item><itemname="android:activityCloseEnterAnimation">@anim/activity_close_in_anim</item><itemname="android:activityCloseExitAnimation">@anim/activity_close_out_anim</item></style>

现在假设有两个Activity, A 和 B。 在A中可以启动B. 同时,A,B的theme属性均设置为上面定义的属性。那么,以上动画的发生时机如下:
(1)当A启动B时,A退出,B进入,A退出时的动画名称为android:activityOpenExitAnimation,动画文件为
R.anim.activity_open_out_anim. B进入时的动画名称为android:activityOpenEnterAnimation, 动画文件为R.anim.activity_open_in_anim.
(2)当B结束时,B退出,A进入。B退出的动画名称为android:activityCloseExitAnimation, 动画文件为R.anim.activity_close_out_anim. A进入时的动画名称为android:activityCloseEnterAnimation, 动画文件为R.anim.activity_close_in_anim.
通过以上设置,Activity切换时便可以显示切换动画效果。
下面四个文件定位的是上面用到的四个动画。

R.anim.activity_close_in_anim.xml<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="-100%p"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="0"android:toYDelta="0"/></set>R.anim.activity_close_out_anim.xml<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="0"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="100%p"android:toYDelta="0"/></set>R.anim.activity_open_in_anim.xml<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="100%p"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="0"android:toYDelta="0"/></set>R.anim.activity_open_out_anim.xml<?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="400"android:fromXDelta="0"android:fromYDelta="0"android:interpolator="@android:anim/decelerate_interpolator"android:toXDelta="-100%p"android:toYDelta="0"/></set>







补充一下,xml中设置的资料:


从上图可以看出,以手机屏幕下面边未X轴,屏幕左边为Y轴,当Activity在X轴值为-100%p时,刚好在屏幕的左边(位置1),当X轴值为0%p时,刚好再屏幕内(位置2),当X=100%p时刚好在屏幕右边(位置3)。

清楚了位置后,我们就可以实现左右滑动滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,这样就能实现从左右切换效果。


更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. sharedPreferences保存数据和TextWatcher监听输入框的技术介绍
  6. AndroidStudio的glide4.3库报错Error: Failed to resolve: com.a
  7. Android(安卓)创建快捷方式
  8. Android: /cache中的文件是怎么消失的[转]
  9. Android(安卓)Studio 出现Error:Connection timed out: connect.

随机推荐

  1. Android开发菜鸟——RecyclerView
  2. android 铃声设置流程
  3. 我的Android进阶之旅------>经典的大客推
  4. 如何让Activity以全屏方式显示
  5. 菜单栏上没有android机器人的图标(AVD)的解
  6. 手机APP测试之兼容测试
  7. EventBus源码解析
  8. Android获取assets目录下的文件和图片
  9. 谈中型项目下的编码技巧二
  10. Android(安卓)LinearLayout 点击背景颜色