在 activity 转换期间将默认启动器屏幕(粉红色屏幕)视为背景
Seeing default launcher screen(pink color screen) as a background during activity transition
我正在为 双屏 创建一个 android 应用程序,其中包含 2 activity splash & home,其中声明了 home activity 启动模式作为 singleTask 如下所述:
<activity
android:name=".activity.SplashActivity"
android:theme="@style/FullScreen" />
<activity
android:name=".activity.HomeScreenActivity"
android:launchMode="singleTask"
android:theme="@style/DisableToolbar">
<style name="FullScreen" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:toolbarStyle">@android:color/transparent</item>
</style>
<style name="DisableToolbar" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:toolbarStyle">@android:color/transparent</item>
</style>
启动画面只播放 10 秒的视频并移动到主页 activity 带有一些过渡动画,当我们在单个屏幕中启动它时效果很好,但同一应用有 2 种不同的风格& 一次在两个显示器上启动它,视频在两个屏幕上都能很好地播放,当它调用 home activity 时,我可以看到一些 android 默认启动器作为过渡期间或调用 home 之前的背景activity,如何去掉这个背景。
我尝试了以下方法来解决这个问题:
- 将用于在启动画面中播放视频的 VideoView 更改为带有 MediaPlayer 的 SurfaceView
- 集成Asynctask播放视频
- 更改了主屏幕启动行为(删除了 singleTask)
- 为启动画面应用了一些背景主题
- 尝试了一些从初始屏幕到主页的过渡动画activity,当左右屏幕同时打开时它不会调用
- 在延迟一段时间后完成启动 activity
这是 splash 的代码片段 activity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_activity);
mSurfaceView = findViewById(R.id.splashView);
}
@Override
protected void onStart() {
super.onStart();
setSplashVideo();
}
private void setSplashVideo() {
mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
mSurfaceHolder = surfaceHolder;
Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.lr_oval_startup);
if (videoUri != null) {
mMediaPlayer = MediaPlayer.create(SplashActivity.this,
videoUri, mSurfaceHolder);
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mMediaPlayer.start();
}
});
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
jump();
}
});
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
});
}
private void jump() {
if (isFinishing())
return;
startActivity(new Intent(SplashActivity.this, HomeScreenActivity.class));
finish();
overridePendingTransition(R.anim.overlay_in,0);
}
@Override
protected void onStop() {
super.onStop();
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
将主题设置为全屏,即 HomeActivity 解决了这个问题。
我正在为 双屏 创建一个 android 应用程序,其中包含 2 activity splash & home,其中声明了 home activity 启动模式作为 singleTask 如下所述:
<activity
android:name=".activity.SplashActivity"
android:theme="@style/FullScreen" />
<activity
android:name=".activity.HomeScreenActivity"
android:launchMode="singleTask"
android:theme="@style/DisableToolbar">
<style name="FullScreen" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:toolbarStyle">@android:color/transparent</item>
</style>
<style name="DisableToolbar" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:toolbarStyle">@android:color/transparent</item>
</style>
启动画面只播放 10 秒的视频并移动到主页 activity 带有一些过渡动画,当我们在单个屏幕中启动它时效果很好,但同一应用有 2 种不同的风格& 一次在两个显示器上启动它,视频在两个屏幕上都能很好地播放,当它调用 home activity 时,我可以看到一些 android 默认启动器作为过渡期间或调用 home 之前的背景activity,如何去掉这个背景。 我尝试了以下方法来解决这个问题:
- 将用于在启动画面中播放视频的 VideoView 更改为带有 MediaPlayer 的 SurfaceView
- 集成Asynctask播放视频
- 更改了主屏幕启动行为(删除了 singleTask)
- 为启动画面应用了一些背景主题
- 尝试了一些从初始屏幕到主页的过渡动画activity,当左右屏幕同时打开时它不会调用
- 在延迟一段时间后完成启动 activity
这是 splash 的代码片段 activity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_activity);
mSurfaceView = findViewById(R.id.splashView);
}
@Override
protected void onStart() {
super.onStart();
setSplashVideo();
}
private void setSplashVideo() {
mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
mSurfaceHolder = surfaceHolder;
Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.lr_oval_startup);
if (videoUri != null) {
mMediaPlayer = MediaPlayer.create(SplashActivity.this,
videoUri, mSurfaceHolder);
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mMediaPlayer.start();
}
});
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
jump();
}
});
}
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
});
}
private void jump() {
if (isFinishing())
return;
startActivity(new Intent(SplashActivity.this, HomeScreenActivity.class));
finish();
overridePendingTransition(R.anim.overlay_in,0);
}
@Override
protected void onStop() {
super.onStop();
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
将主题设置为全屏,即 HomeActivity 解决了这个问题。