Android页面切换动画(包括不同任务栈之间页面切换动画)通过Theme去设置

来源:互联网 发布:散热仿真软件 编辑:程序博客网 时间:2024/06/09 18:49

最近再做一个功能,需求是:

    当用户账号在异地登录,不管用户在哪个页面,都要去打开登录界面,要求登录成功或者返回不登录,都要回到MainActivity,其余的页面全部再后台关闭.

实现步骤如下:

1.把MainActivity页面在单独的任务栈中放置,代码如下:

    在配置清单文件中:
      <activity android:name=".Activity.MainActivity" android:launchMode="singleInstance"/>如不懂Activity四种启动模式的,先去百度一下,网上有很多详细的讲解;这个时候我们的app就有两个任务栈,而且MianActivity任务栈在单独的一个任务栈中,

2.当跳转到登录界面的时候,我们去清空之前的任务栈,这个时候登录的页面也在一个任务栈中,这个时候,就是连个页面连个任务栈

代码:

Intent intent2 = new Intent(act, LoginActivity.class);//表示清空之间任务栈中所有的页面,重新创建一个任务栈,放入登录页面intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);act.startActivity(intent2);

这个时候就完成了;

但是,测试却发现,android默认情况同一个任务站页面切换动画和不同任务栈页面切换动画竟然是不一样的;

刚开始感到很奇怪,仔细细想,一个app默认只有一个任务栈,不同任务栈之间页面切换,默认就是不同app之间页面切换,(我们都知道隐式意图可以实现不同app页面切换),动画不一样才是Google的良苦用心,

但是我们是一个app,不能让用户有两个app切换的感觉,既然google提供了使用Theme来配置全局动画,那么猜想一定有设置不同任务栈之间页面之间切换的动画,立马在主题页面试一番,当看到Task…这个单词时候,潸然泪下;接下来就是屡起袖子:干!

进入今天的主题,要不然就跑题了!

一.通过主题去设置同一个栈之间页面切换动画,不了解的可以去参考鸿洋这篇博客

1 . 在项目res目录下新建anim文件夹,里边放的都是动画,写入4个动画 in_from_right.xml ; in_from_right_close.xml ; out_to_left.xml ,out_to_left_colse.xml ;具体代码如下:和Android默认的动画一致

in_from_right.xml代码

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/accelerate_interpolator">    <translate        android:duration="300"        android:fromXDelta="100%p"        android:toXDelta="0%p" /></set>

in_from_right_close.xml 代码

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/accelerate_interpolator">    <translate        android:duration="300"        android:fromXDelta="-100%p"        android:toXDelta="0%p" /></set>

out_to_left.xml 代码:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/accelerate_interpolator">    <translate        android:duration="300"        android:fromXDelta="0%p"        android:toXDelta="-100%p" /></set>

out_to_left_colse.xml 代码:

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/accelerate_interpolator">    <translate        android:duration="300"        android:fromXDelta="0%p"        android:toXDelta="100%p" /></set>

2 . 在values文件夹下,Style文件中写入如下代码:

  <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">        <!--自定义页面切换动画-->      <itemname="android:windowAnimationStyle">@style/fade</item>    </style>
@style/fade代码
<style name="fade" parent="@android:style/Animation.Activity">        <item name="android:activityOpenEnterAnimation">@anim/in_from_right</item>        <item name="android:activityOpenExitAnimation">@anim/out_to_left</item>        <item name="android:activityCloseEnterAnimation">@anim/in_from_right_close</item>        <item name="android:activityCloseExitAnimation">@anim/out_to_left_colse</item>    </style>

3 . 最后在清单文件中引入我们自定义的主题,

以上就算完成了通过主题配置同一个任务栈之间页面切换动画

二. 通过主题去设置不同Task页面之间的动画切换,具体属性去参考pi9nc博客

不同栈之间的动画切换,只需要在上边2步骤中加入下边4个属性,即可设置完成不同任务栈之间页面动画切换的设置:

        <item name="android:taskOpenEnterAnimation">@anim/in_from_right</item>        <item name="android:taskOpenExitAnimation">@anim/out_to_left</item>        <item name="android:taskCloseEnterAnimation">@anim/in_from_right_close</item>        <item name="android:taskCloseExitAnimation">@anim/out_to_left_colse</item>

至此感谢,鸿洋这篇博客,pi9nc博客对我提供的参考.希望对后来人提供一些帮助!

1 0
原创粉丝点击