最近开发Activity需要和苹果统一页面跳转动画,于是就碰到了跳转动画中出现黑屏的问题。
再经过百度一番之后大概解决方案有如下几个:
1.修改Activity的主题:
第一步:自定义Theme(主题)
在your_project/res/values/styles.xml中加入自定义Activity的Theme,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Activity主题 -->
<style name="activityTheme" parent="@android:style/Theme">
<item name="android:windowIsTranslucent">true</item>
</style>
</resources>
其中<item name="android:windowIsTranslucent">true</item>的意思是设置目标 Activity(要启动的那个Activity)是透明的。很容易理解,两个Activity,A和B;在A中启动B,因为B是透明的,看到的背景仍是 A,这样就解决了这个短暂的黑屏问题。
第二步:修改Manifest,将Theme应用到目标Activity上
定义好Theme后,就该为对应的Activity绑定Theme了。这个代码主要在Manifest中实现,在Activity中加上以下属性:
<activity android:name=".activity.PlacingOrderStep1Activity"
android:theme="@style/activityTheme" />
结论:根本就没有考虑或尝试这个解决方案,因为这个方案在处理多个Activity跳转时可能会出问题,放弃。
2.将Activity的启动模式从signleTask改回标准模式。
结论:会影响Activity跳转逻辑,放弃。
3.再进入动画中添加一个设置透明度从1到1的和跳入动画等时常的动画。关闭动画时,overridePendingTransition(0,R.anim.push_bottom_out);
如下:
跳入的时候在跳转之后加overridePendingTransition(R.anim.push_bottom_in,R.anim.push_style_out);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intenta = new Intent(Main.this, OtherActivity.class);
startActivity(intenta);
overridePendingTransition(R.anim.push_bottom_in,R.anim.push_style_out);
}
});
关闭页面在finish之后加 overridePendingTransition(0,R.anim.push_bottom_out);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
overridePendingTransition(0,R.anim.push_bottom_out);
}
});
上下滑动动画:push_bottom_in
<translate
android:duration="500"
android:fromYDelta="100%p"
android:toYDelta="0"
/>
上下滑动动画:push_bottom_out
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="500"
android:fromYDelta="0"
android:toYDelta="100%p" />
</set>
防止黑屏:push_style_out
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="1"
android:toAlpha="1"
android:duration="500"
/>
</set>
结论:效果达成,黑屏没有了。也没有影响到代码内部的逻辑流程。采纳!