問題描述
最近使用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
來源:簡書