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