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

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

    当用户账号在异地登录,不管用户在哪个页面,都要去打开登录界面,要求登录成功或者返回不登录,都要回到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博客对我提供的参考.希望对后来人提供一些帮助!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android设置启动页面需要进行以下步骤: 1. 首先在 `res/layout` 目录下创建一个新的布局文件,用来作为启动页面界面,例如 `activity_splash.xml`。 2. 在 `AndroidManifest.xml` 文件中设置启动页面的 `Activity`,可以使用 `<activity>` 标签来定义一个新的 `Activity`,并且设置 `android.intent.action.MAIN` 和 `android.intent.category.LAUNCHER` 两个属性,例如: ```xml <activity android:name=".SplashActivity" android:screenOrientation="portrait" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> ``` 其中 `android:name` 属性指定了该 `Activity` 的类名,`android:screenOrientation` 属性指定了屏幕方向,`android:theme` 属性指定了该 `Activity` 的主题,然后通过 `<intent-filter>` 标签来设置启动页面的 `action` 和 `category` 属性。 3. 在 `SplashActivity` 的 `onCreate()` 方法中设置需要执行的操作,例如加载数据或者进行跳转操作,例如: ```java public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 加载布局文件 setContentView(R.layout.activity_splash); // 延时2秒跳转到MainActivity new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); finish(); } }, 2000); } } ``` 在 `onCreate()` 方法中使用 `setContentView()` 方法加载布局文件,然后使用 `Handler` 类的 `postDelayed()` 方法实现延时跳转操作,最后通过 `startActivity()` 方法跳转到 `MainActivity` 页面,并且调用 `finish()` 方法关闭当前 `Activity`。 这样就完成了 Android 设置启动页面的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值