您的位置:首页 > 移动开发 > Android开发

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

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

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

1.使用overridePendingTransition

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

<span style="font-size:14px;">//从ActivityA跳转到ActivityB
startActivity(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从左侧渐入屏幕,这样的效果,非常基础,动画可以随意换成其他的形式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android