Android 自定义Activity切换动画效果的常用方法

来源:互联网 发布:const javascript 编辑:程序博客网 时间:2024/05/01 02:14

前言:大家好,我是Clover,从事Android应用开发以来一直自学,身边能请教的牛人很少,遇到问题就泡在CSDN各种学习大神们的经验,真的非常感谢CSDN这个平台。到目前Clover也是积累了一点项目经验,决定写点自己的文,整理一些平时常用的方法、技术点或是典型的小组件,算是对自己平日学习的总结和记录吧,都是基础的东西大神请忽略,有不正确或者可以改进的地方欢迎大家帮忙指点,谢谢☺️


在android应用开发过程中经常需要用到Activity的跳转,添加一些跳转的动画效果能提高应用的用户体验,下面以ActivityA中启动ActivityB为例,介绍两个自己常用的方法:

1.使用overridePendingTransition

用在startActivity后,overridePendingTransition(ActivityB进入动画,ActivityA退出动画),注意:此方法需要判断SDK版本,代码如下:

<span style="font-size:14px;">//从ActivityA跳转到ActivityBstartActivity(new Intent(ActivityA.this, ActivityB.class));//获取当前Android SDK版本号int version = android.os.Build.VERSION.SDK_INT; if(version > 5 ){    //设置跳转动画    overridePendingTransition(R.anim.in_from_right_to_center, R.anim.out_from_center_to_left);} </span>

2.使用Style定义动画

在Manifest文件中声明Activity时,可以通过android:theme属性设置Activity的主题,主题中可以定义Activity的切换动画。此方法没有版本限制。

首先,在res/values/style.xml的文件中插入一个<style />节点,声明一个主题,代码如下:

<style name="ActivitySwitch.Theme" parent="@style/Theme.Sherlock.Light">      <item name="android:windowAnimationStyle">@style/activity_anim</item>  </style>
这里定义的主题命名为ActivitySwitch.Theme,父级主题即为应用的主题,我这里用的是外部项目主题,也可以使用android自带主题如:@android:style/Theme.NoTitleBar,<item/>节点中定义一个"android:windowAnimationStyle"属性,指向另一个自定义主题activity_anim,该主题中定义切换的动画,在style.xml中继续添加:

<span style="font-size:14px;"><style name="activity_anim"  parent="@android:style/Animation.Activity">      <!-- ActivityB Enter Animation -->    <item name="android:activityOpenEnterAnimation">@anim/in_from_right_to_center</item>     <!-- ActivityA Exit Animation -->    <item name="android:activityOpenExitAnimation">@anim/out_from_center_to_left</item>     <!-- ActivityA Enter Animation -->    <item name="android:activityCloseEnterAnimation">@anim/in_from_left_to_center</item>    <!-- ActivityB Exit Animation -->    <item name="android:activityCloseExitAnimation">@anim/out_from_center_to_right</item></style> </span>

下面是动画文件代码

in_from_right_to_center.xml

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">       <translate       android:fromXDelta="100%p"        android:toXDelta="0%p"        android:duration="300"/>         <alpha       android:fromAlpha="0.0"        android:toAlpha="1.0"      android:duration="300" /> </set> </span>

out_from_center_to_left.xml

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">       <translate       android:fromXDelta="0%p"        android:toXDelta="-100%p"        android:duration="300"/>         <alpha       android:fromAlpha="1.0"        android:toAlpha="0.0"      android:duration="300" /> </set> </span>

in_from_left_to_center.xml

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">       <translate       android:fromXDelta="-100%p"        android:toXDelta="0%p"        android:duration="300"/>         <alpha       android:fromAlpha="0.0"        android:toAlpha="1.0"      android:duration="300" /></set></span>

out_from_center_to_right.xml

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android">       <translate       android:fromXDelta="0%p"        android:toXDelta="100%p"        android:duration="300"/>         <alpha       android:fromAlpha="1.0"        android:toAlpha="0.0"      android:duration="300" /></set> </span>

这样就实现了从ActivityA跳转到ActivityB,B从右侧渐入屏幕,A从左侧淡出屏幕的效果,同样,从B返回A时,B从右侧淡出屏幕,A从左侧渐入屏幕,这样的效果,非常基础,动画可以随意换成其他的形式。


0 0
原创粉丝点击