From 30c7ca5437cf65dc74ebfdd60a44d89da2bfaf79 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 21 Oct 2017 20:52:29 +0200 Subject: Shared element transition of cover --- .../de/danoeh/antennapod/activity/MediaplayerActivity.java | 12 +++++++++++- .../antennapod/activity/MediaplayerInfoActivity.java | 9 +++++++++ .../danoeh/antennapod/fragment/ExternalPlayerFragment.java | 14 ++++++++++++-- app/src/main/res/layout/cover_fragment.xml | 1 + app/src/main/res/layout/external_player_fragment.xml | 1 + core/src/main/res/values-v21/styles.xml | 6 ++++++ 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java index 21a0fa66f..b0cbd355b 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -11,6 +11,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.ActivityOptionsCompat; import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.Menu; @@ -368,7 +369,16 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); + + View cover = findViewById(R.id.imgvCover); + if (cover != null && Build.VERSION.SDK_INT >= 16) { + ActivityOptionsCompat options = ActivityOptionsCompat. + makeSceneTransitionAnimation(MediaplayerActivity.this, + cover, "coverTransition"); + startActivity(intent, options.toBundle()); + } else { + startActivity(intent); + } return true; } else { if (media != null) { diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java index b3cda69d3..cc7d83e0c 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Build; +import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.design.widget.Snackbar; @@ -112,6 +113,12 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem EventBus.getDefault().unregister(this); } + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + supportPostponeEnterTransition(); + } + @Override protected void onStop() { super.onStop(); @@ -277,6 +284,8 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity implem pageIndicator.setViewPager(pager); loadLastFragment(); pager.onSaveInstanceState(); + + navList.post(this::supportStartPostponedEnterTransition); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java index 1e385728a..ebdb658d5 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -1,6 +1,9 @@ package de.danoeh.antennapod.fragment; +import android.content.Intent; +import android.os.Build; import android.os.Bundle; +import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; @@ -56,8 +59,15 @@ public class ExternalPlayerFragment extends Fragment { Log.d(TAG, "layoutInfo was clicked"); if (controller != null && controller.getMedia() != null) { - startActivity(PlaybackService.getPlayerActivityIntent( - getActivity(), controller.getMedia())); + Intent intent = PlaybackService.getPlayerActivityIntent(getActivity(), controller.getMedia()); + + if (Build.VERSION.SDK_INT >= 16) { + ActivityOptionsCompat options = ActivityOptionsCompat. + makeSceneTransitionAnimation(getActivity(), imgvCover, "coverTransition"); + startActivity(intent, options.toBundle()); + } else { + startActivity(intent); + } } }); return root; diff --git a/app/src/main/res/layout/cover_fragment.xml b/app/src/main/res/layout/cover_fragment.xml index 9ad1ff9c6..05b927da4 100644 --- a/app/src/main/res/layout/cover_fragment.xml +++ b/app/src/main/res/layout/cover_fragment.xml @@ -16,6 +16,7 @@ android:scaleType="fitCenter" app:layout_aspectRatio="100%" app:layout_widthPercent="82%" + android:transitionName="coverTransition" tools:src="@android:drawable/sym_def_app_icon" /> diff --git a/core/src/main/res/values-v21/styles.xml b/core/src/main/res/values-v21/styles.xml index 42bd358c7..503337c95 100644 --- a/core/src/main/res/values-v21/styles.xml +++ b/core/src/main/res/values-v21/styles.xml @@ -1,5 +1,11 @@ + +