Java 使用android共享元素转换动画时,背景屏幕会出现几秒钟

Java 使用android共享元素转换动画时,背景屏幕会出现几秒钟,java,android,android-animation,Java,Android,Android Animation,我正在尝试构建我的第一个android应用程序,其中我有两个活动(第一个是启动屏幕,第二个是登录屏幕),当从第一个活动移动到第二个活动时,我使用共享元素转换。但我做错了一些事情,因为过渡并不顺利,在一瞬间,背景屏幕出现在两个活动之间。请参阅GIF以便更好地理解 我能够捕捉到活动之间出现的画面。看起来是这样的, 您可以看到第一个活动的ImageView在框架中仍然可见。甚至包含“您好,欢迎回来”的textView也可见 我正在分享下面的活动布局和相应的java文件 活动\u main.xml(

我正在尝试构建我的第一个android应用程序,其中我有两个活动(第一个是启动屏幕,第二个是登录屏幕),当从第一个活动移动到第二个活动时,我使用共享元素转换。但我做错了一些事情,因为过渡并不顺利,在一瞬间,背景屏幕出现在两个活动之间。请参阅GIF以便更好地理解

我能够捕捉到活动之间出现的画面。看起来是这样的,

您可以看到第一个活动的
ImageView
在框架中仍然可见。甚至包含“您好,欢迎回来”的
textView
也可见

我正在分享下面的活动布局和相应的java文件

活动\u main.xml(启动屏幕)

login.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().setStatusBarColor(Color.parseColor("#1f1f1d"));
    getWindow().setEnterTransition(null);
    setContentView(R.layout.activity_login);
}

@Override
public void onBackPressed() {
    finish();
}
我已经尝试过很多不同的关于闪烁/闪烁共享元素转换的stackoverflow问题的解决方案,但都没有效果。有人能指出我做错了什么吗


提前感谢。

这是因为在调用finish()时,您试图调用的活动尚未就绪

您可以通过在onStop方法中添加finish来解决此问题

@Override
public void onStop() {
   super.onStop();
   finish(); 
}

您可以在此答案中找到更多详细信息

您的应用程序主题的
windowBackground
是什么?可能它是透明的,在活动的
#1f1d
背景膨胀之前有一瞬间。
windowBackground
应用程序中的主题最初没有设置,但将其设置为相同的颜色
#1f1d
没有任何区别。这正是我需要知道的。谢谢
private static int SPLASH_TIMEOUT = 3000;

Animation splashAnimation;
View splashView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().setExitTransition(null);
    setContentView(R.layout.activity_main);

    splashAnimation = AnimationUtils.loadAnimation(this, R.anim.splash_animation);
    splashView = findViewById(R.id.splashLogo);
    splashView.setAnimation(splashAnimation);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent = new Intent(MainActivity.this, login.class);
            ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, splashView, ViewCompat.getTransitionName(splashView));
            startActivity(intent, optionsCompat.toBundle());

            finish();
        }
    }, SPLASH_TIMEOUT);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().setStatusBarColor(Color.parseColor("#1f1f1d"));
    getWindow().setEnterTransition(null);
    setContentView(R.layout.activity_login);
}

@Override
public void onBackPressed() {
    finish();
}
@Override
public void onStop() {
   super.onStop();
   finish(); 
}