私は2つのアクティビティを持っています。最初のものはスプラッシュ画面で、中央にロゴがあります。 2番目のアクティビティの上部にロゴが表示されます(ロゴはメインよりも小さくなります)。しばらくすると、最初のアクティビティが閉じられ、ロゴは共有要素のアクティビティ遷移を使用してアニメートされます。最初のアクティビティのonStopでは終了します(スプラッシュなので、もう必要ありません)。 問題は、2番目のアクティビティで戻るときに、アクティビティが既に非表示になっていても、しばらく(2〜3秒)画面上にロゴが表示されるということです。 は次のようになります。emulator screenshot共有要素アクティビティ遷移。アクティビティが破壊されている間、画面に表示されたままになります。
最初のアクティビティ:
public class MainActivity extends BaseActivity {
@BindView(R.id.logo)
public ImageView imageView;
private boolean mShouldFinish;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startSecondActivity();
}
}, 3000);
}
@Override
protected void onStop() {
super.onStop();
if(mShouldFinish) {
finish();
}
}
private void startSecondActivity() {
Intent intent = new Intent(this, SecondActivity.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imageView, "logo");
startActivity(intent, options.toBundle());
} else {
startActivity(intent);
}
mShouldFinish = true;
}
}
SecondActivity:
public class SecondActivity extends BaseActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
FirstActivityレイアウト:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.github.guliash.androidexplorer.MainActivity">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/ic_android_black_48dp"
android:layout_gravity="center"
android:transitionName="logo"
android:id="@+id/logo"
android:scaleType="fitCenter"/>
</FrameLayout>
SecondActivityレイアウト:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_android_black_48dp"
android:transitionName="logo"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
私は間違っていますか?
全コードはここで見つけることができ github repo
。しかし、なぜ私はそこで終了する必要がありますか? – Guliash
デフォルトでは、共有要素は元の場所に戻ろうとします(終了遷移)。あなたが元の活動を終えるので、行く場所がありません。 finishを呼び出すと、この遷移は無視されます。 –
私は参照してください。あなたは私がそのようなことについて読むことができるチュートリアルを提案できますか?私は2日間のグーグルでそれについての情報は見つけられませんでした。 – Guliash