android:windowIsTranslucent=true情況下的Activity轉場動畫穿透問題

原文鏈接:https://www.jianshu.com/p/31e053564857

問題描述

最近使用SwipeBackLayout做滑動返回,添加<item name="android:windowIsTranslucent">true</item>屬性將window改爲透明,發現這個設置影響到了Activity切換動畫。

A、B兩個Activity,初始啓動A Activity,再使用A啓動B Activity,此時在B中調用方法將A Activity關閉,正常情況下window不爲透明,UI表現上並不會感知到Activity被關閉,但是在設置windowIsTranslucent=true之後,A Activity關閉動畫會穿透到上層Activity,設置overridePendingTransition(0,0)也無效。

問題版本

系統版本 7.0及以上會出現動畫穿透問題

版本 4.0 4.4 5.0 6.0 7.0 8.0 P
表現 x x x

解決方案

這篇文章《Activity轉場動畫無效 android:windowIsTranslucent》中說明了在windowIsTranslucent=true情況下需要設置繼承了@android:style/Animation.Translucent的動畫。根據這個思路來解決遇到的動畫穿透問題:

style中設置windowAnimationStyle,使用繼承Animation.Translucent的動畫。

<style name="AppTranslateTheme" parent="AppBaseTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@style/animation_translucent_translate</item>
</style>

設置Animation爲null

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

設置好之後就不會出現穿透動畫問題了,但是Activity的打開和關閉也都沒有了默認動畫,通過overridePendingTransition(int, int)來設置Activity動畫。

public abstract class BaseActivity extends Activity{
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        overridePendingTransition(android.R.anim.slide_in_left, 0); //設置入場動畫
        setContentView(R.layout.activity_main);
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(0, android.R.anim.slide_out_right); //設置關閉動畫
    }
}

問題解決。

總結



作者:Lynn_R01612x2
鏈接:https://www.jianshu.com/p/31e053564857
來源:簡書
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章