摘要:windowIsTranslucent 和windowAnimationStyle冲突

今天在写 android仿IOS 侧滑销毁的时候 需要把activity的背景设置成透明 在滑出的时候漏出 栈下面一层的activity 在AppTheme里面 设置了windowIsTranslucent 属性

1
2
3
4
5
6
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">#333333</item>
<item name="colorPrimaryDark">#333333</item>
<item name="android:windowAnimationStyle">@style/MyActivitySiwtchAnimation</item>  
 <item name="android:windowBackground">@color/transparent</item>  
 <item name="android:windowIsTranslucent">true</item> </style>

这里之前设置过 activity 切换动画
接下来 问题来了

设置windowIsTranslucent 后android:windowAnimationStyle 失效了,不好使了

差了写资料 已解决 再次记录下

1
2
3
4
5
6
7
8
9
10
11
12
<style name="MyActivitySiwtchAnimation" parent="@android:style/Animation.Translucent">
<!--创建效果-->
<!--<item name="@android:activityOpenEnterAnimation">@anim/out_from_right</item>-->
<!--&lt;!&ndash;上一个被覆盖效果&ndash;&gt;-->
<!--<item name="@android:activityOpenExitAnimation">@anim/out_middle</item>-->
<!--&lt;!&ndash;推出效果&ndash;&gt;-->
<!--<item name="@android:activityCloseExitAnimation">@anim/out_toleft</item>-->
<!--&lt;!&ndash;上一个还原效果&ndash;&gt;-->
<!--<item name="@android:activityCloseEnterAnimation">@anim/out_middle2</item>-->
<item name="android:windowEnterAnimation">@anim/out_from_right</item>
<item name="android:windowExitAnimation">@anim/out_toleft</item>
</style>

1.让 android:windowAnimationStyle 继承 @android :style/Animation.Translucent
此方法 在退出actvity时候动画有效 创建的时候无效

2

1
2
<item name="android:windowEnterAnimation">@anim/out_from_right</item>
<item name="android:windowExitAnimation">@anim/out_toleft</item>

此方法有效。
不过本人是坑爹的锤子手机 在activity切换的时候 自带 一个由下到上的动画 目前的状态是 创建activity是重屏幕右下角出现 ,在其他手机上 还可以

方法二:绝对完美解决

取消

1
<item name="android:windowAnimationStyle">@style/MyActivitySiwtchAnimation</item>

改在 activity 和 fragment的基类里 重写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 重写 activity切换方法 消除系统自带动画
* @param intent
*/
@Override
public void startActivity(Intent intent) {
super.startActivity(intent);
overridePendingTransition(R.anim.out_from_right,android.R.anim.slide_out_right);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.out_from_right,android.R.anim.slide_out_right);
}
@Override
public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
super.startActivityForResult(intent, requestCode, options);
overridePendingTransition(R.anim.out_from_right,android.R.anim.slide_out_right);
}
@Override
public void startActivityForResult(Intent intent, int requestCode) {
super.startActivityForResult(intent, requestCode);
overridePendingTransition(R.anim.out_from_right,android.R.anim.slide_out_right);
}

实现 切换动画

这里收集了一些系统动画

//实现淡入浅出的效果

1
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);

// 由左向右滑入的效果

1
overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);