通过style实现Activity的界面切换

来源:互联网 发布:网络门事件 编辑:程序博客网 时间:2024/05/21 10:17

Activity的界面切换可以通过调用系统的方法,overridePendingTransition(int enterAnim, int exitAnim)来实现。

假设界面A点击后可以进入界面B,点击back键后,B界面关闭,返回到A界面。

通过xml文件可以实现动画效果,然后调用overridePendingTransition即可,第一个参数代表即将能看到的界面,第二个参数代表即将看不到得界面。这里,举例使用最常用的方式,界面自然左右滑动切换。

a:从A进入B(A消失,B出现)(文件名:可以理解为A的open动作,A消失,和B出现的动画)

activity_open_exit.xml<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromXDelta="0" android:toXDelta="-100%p"android:duration="500" /><alpha android:fromAlpha="1.0" android:toAlpha="1.0"android:duration="500" /></set>


activity_open_enter.xml<?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"android:duration="500" /><alpha android:fromAlpha="1.0" android:toAlpha="1.0"android:duration="500" /></set>

b:B界面按back键,回到A界面的过程

activity_close_enter.xml<?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"android:duration="500" /><alpha android:fromAlpha="1.0" android:toAlpha="1.0"android:duration="500" /></set>

activity_close_exit.xml<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromXDelta="0" android:toXDelta="100%p"android:duration="500" /><alpha android:fromAlpha="1.0" android:toAlpha="1.0"android:duration="500" /></set>

这样,overridePendingTransition(R.anim.activity_open_enter, R.anim.activity_anim_exit);overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);即可实现界面的切换,但是这是通过代码,每次打开一个activity都需要这样来写。我们可以通过在AndroidManifest中的activity节点中的theme来配置当前Activity打开和退出的动画效果。

这里,首先介绍一下在Android中的theme和style的区别:

风格Style是一个包含一种或多种格式化属性的集合,你可以把它应用在UI组件上。主题Theme也是一个包含一种或多种格式化属性的集合,你可以把它应用在整个应用程序(Application)中或者某个窗口(Activity)中。比如,布局文件中的TextView和Button等,我们都可以在styles.xml中找到一些属性的配置,而在themes.xml中,可以看到有这样的属性配置<item name="android:buttonStyle">@style/xxxx</item>,这表示使用了这个Theme的界面上的button会默认使用这样的style,不会使用系统默认的了。

在styles.xml中,我们可以看到这样的style,并且其中有这样的item。

<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><!—忽略其他--></style>
那么,我们只要继承这个style,然后换成我们的动画效果就可以了,在activity的节点配置中,使用我们的style就可以了,但是,这里也可以使用继承themes.xml中的主题来实现,因为,主题中为我们提供了界面切换的style,<item name="android:windowAnimationStyle">@style/自己的style</item>。

通过上述方式,就实现了界面的切换,并且不用每次打开界面都调用overridePendingTransition方法,但是,如果在同一个界面中又不同的切换效果呢,那么就需要使用overridePendingTransition了。

提示:如果activity节点和overridePendingTransition都写了,App会使用代码中,就比如布局中写了,代码中也写了,会使用代码中的配置。

demo:

<style name="My.Animation.Activity" parent="@android:style/Animation.Activity">        <item name="android:activityOpenEnterAnimation">@anim/push_left_in</item>        <item name="android:activityOpenExitAnimation">@anim/push_left_out</item>        <item name="android:activityCloseEnterAnimation">@anim/push_right_in</item>        <item name="android:activityCloseExitAnimation">@anim/push_right_out</item></style>style name="AppTheme" parent="@android:style/Theme.Light.NoTitleBar">        <item name="android:windowAnimationStyle">@style/My.Animation.Activity</item>。</style>






0 0