问题描述
我正在尝试构建我的第一个android应用程序,其中有两个活动(第一个活动是启动屏幕,第二个活动是登录屏幕),并且在从第一个活动移动到第二个活动时,我正在使用共享元素过渡。但是我做错了事,因为过渡不顺利,而且一瞬间,两个活动之间出现了背景屏幕。请参阅GIF以更好地了解
我能够捕获活动之间出现的框架。看起来像这样,
您可以看到第一个活动的Coregion
在框架中仍然可见。甚至包含“您好,欢迎回来”的ImageView
也是可见的。
我在下面共享活动布局和相应的Java文件,
activity_main.xml(启动画面)
textView
activity_login.xml(登录屏幕)
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="#1f1f1d"
android:orientation="vertical">
<ImageView
android:id="@+id/splashLogo"
android:layout_width="180dp"
android:layout_height="80dp"
android:background="@drawable/splash"
android:transitionName="logo_anim"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
main_activity.java(启动)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1f1f1d"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView2"
android:layout_width="160dp"
android:layout_height="90dp"
android:layout_marginTop="30dp"
android:layout_marginStart="20dp"
android:transitionName="logo_anim"
app:srcCompat="@drawable/splash" />
<TextView
android:id="@+id/textViewWelcome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="25dp"
android:fontFamily="@font/bungee"
android:includeFontPadding="false"
android:paddingTop="0dp"
android:layout_marginTop="0dp"
android:text="Hello,\nWelcome Back"
android:textColor="#BFAD0F"
android:textSize="24sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="25dp"
android:layout_marginTop="40dp"
android:fontFamily="@font/antic"
android:text="Login to continue"
android:textColor="#CCC588"
android:textSize="18sp" />
<LinearLayout
// This part has the login form and buttons,// not adding them here as they seems to be
// unnecessary in this context
</LinearLayout>
</LinearLayout>
login.java
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);
}
我尝试了许多关于闪烁共享元素过渡的不同stackoverflow问题中所述的解决方案,但没有任何效果。谁能指出我在这里做错了什么?
谢谢。
解决方法
发生这种情况是因为当您调用 finish() 时,您尝试调用的活动尚未准备好
可以通过在onStop方法中添加finish来解决
@Override
public void onStop() {
super.onStop();
finish();
}
您可以找到有关此答案的更多详细信息 https://stackoverflow.com/a/29663116