android:windowIsTranslucent 引起activity切换动画无效解决方案

在做项目的当中,就碰到了这个问题:启动app的时候,会出现一秒左右的白屏或者黑屏;当然,我们肯定会到网上搜索如何解决这个问题,我在这里写一下,我搜到的方法,好处及缺点。

一、设置windowBackground,给启动页设置这个theme

AndroidManifest.xml

<activity
            android:name=".activity.FirstActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Start" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

styles.xml

<style name="Theme.Start" parent="android:Theme">
        <item name="android:windowBackground">@drawable/splash_bg</item>
        <item name="android:windowNoTitle">true</item>
    </style>

这个方法的可行之处,当你的app启动页常年不需要更换的时候,推荐使用这种方法, 简单,快捷,而且activity的切换动画也是有效的,但是如果当你的app启动页会不定时更换的时候,这个方法就不行了。

二、设置 android:windowIsTranslucent

<style name="Theme.Start" parent="android:Theme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

 当设置这个方法之后,app第一个启动页,会按系统默认的动画,打开、退出页面

<style name="Theme.Start" parent="android:Theme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowAnimationStyle">@style/AnimationActivity</item>
    </style>

 不管是否设置android:windowAnimationStyle,他不会按着这个方法来,所以我们可以去掉这一行,那么问题来了,当设置android:windowIsTranslucent后,动画就会失效,怎么办呢,我在网上找了下,也就那么一两种方法,还不是我想要的效果,于是,再思考之后,发现,我直接用代码设置切换也是可行的呀,说做就做,既然失效的是app的启动页,那么我就给启动页设置切换动画。

核心代码:

Intent intent = new Intent(FirstActivity.this, LoginActivity.class);
startActivity(intent);
this.finish();
overridePendingTransition(R.anim.anim_right_in,R.anim.anim_left_out);

 给启动页加入overridePendingTransition之后,切换到另一页的动画就出来了。

目前,就已经达到我想要的效果了,点开app,调用系统默认打开动画,进去启动页,延迟两秒,通过overridePendingTransition,自定义动画来切换到下一页。

那么,有的人可能就有疑惑,如果我非要自定义启动页进入的动画呢?

<style name="Theme.Start" parent="android:Theme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowAnimationStyle">@style/animation_translucent_translate</item>
    </style>

    <style name="animation_translucent_translate" parent="@android:style/Animation.Translucent">
        <item name="android:windowEnterAnimation">@anim/anim_right_in</item>
        <item name="android:windowExitAnimation">@anim/anim_left_out</item>
    </style>

 这样就可以达到我们想要的效果,调用自定义开始动画,overridePendingTransition自定义切换动画,android:windowExitAnimation在我的小米3手机上会失效,可以无视他,并不起什么作用。

贴出我自己想要的效果的代码:

AndroidManifest.xml 里面一个设置

<activity
            android:name=".activity.FirstActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Start" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

styles.xml里面有一个主题

<style name="Theme.Start" parent="android:Theme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

FirstActivity.java 里面一个方法

Intent intent = new Intent(FirstActivity.this, LoginActivity.class);
startActivity(intent);
this.finish();
overridePendingTransition(R.anim.anim_right_in,R.anim.anim_left_out);

相关推荐