在 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,如何去掉这个背景。 我尝试了以下方法来解决这个问题:

  1. 将用于在启动画面中播放视频的 VideoView 更改为带有 MediaPlayer 的 SurfaceView
  2. 集成Asynctask播放视频
  3. 更改了主屏幕启动行为(删除了 singleTask)
  4. 为启动画面应用了一些背景主题
  5. 尝试了一些从初始屏幕到主页的过渡动画activity,当左右屏幕同时打开时它不会调用
  6. 在延迟一段时间后完成启动 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 解决了这个问题。