通过style实现Activity的界面切换

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值