From d36848dca81bbf2a517383d276225615b1da657e Mon Sep 17 00:00:00 2001 From: Benjamin Weiss Date: Thu, 9 Jul 2015 09:57:03 +0100 Subject: [PATCH] Demonstrate usage of Transitions API Introduce custom windowSharedElementEnterTransition to showcase usage of a custom transitionSet. --- app/src/main/AndroidManifest.xml | 5 +-- .../apps/topeka/activity/QuizActivity.java | 36 ++++++++++++++----- .../apps/topeka/fragment/SignInFragment.java | 27 ++++++++++---- app/src/main/res/layout/activity_quiz.xml | 6 +++- .../main/res/transition/category_enter.xml | 24 +++++++++++++ app/src/main/res/transition/quiz_enter.xml | 25 +++++++++++++ app/src/main/res/values/styles.xml | 5 +++ 7 files changed, 110 insertions(+), 18 deletions(-) create mode 100644 app/src/main/res/transition/category_enter.xml create mode 100644 app/src/main/res/transition/quiz_enter.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index db8652c8..17ad9365 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,11 +36,12 @@ - + diff --git a/app/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.java b/app/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.java index cabd24eb..6cc39f73 100644 --- a/app/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.java +++ b/app/src/main/java/com/google/samples/apps/topeka/activity/QuizActivity.java @@ -23,6 +23,8 @@ import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; +import android.transition.Transition; +import android.transition.TransitionInflater; import android.util.Log; import android.view.View; import android.view.ViewAnimationUtils; @@ -91,6 +93,11 @@ public static Intent getStartIntent(Context context, Category category) { @Override protected void onCreate(Bundle savedInstanceState) { + // Inflate and set the enter transition for this activity. + final Transition sharedElementEnterTransition = TransitionInflater.from(this) + .inflateTransition(R.transition.quiz_enter); + getWindow().setSharedElementEnterTransition(sharedElementEnterTransition); + mCategoryId = getIntent().getStringExtra(Category.TAG); mInterpolator = AnimationUtils.loadInterpolator(this, android.R.interpolator.fast_out_slow_in); @@ -127,7 +134,11 @@ public void onBackPressed() { } // Scale the icon to 0 size before calling onBackPressed if it exists. - iconView.animate().scaleX(0).scaleY(0).setStartDelay(0) + iconView.animate() + .scaleX(.7f) + .scaleY(.7f) + .alphaBy(-1f) + .setStartDelay(0) .setInterpolator(mInterpolator).setListener( new AnimatorListenerAdapter() { @Override @@ -138,7 +149,8 @@ public void onAnimationEnd(Animator animation) { QuizActivity.super.onBackPressed(); super.onAnimationEnd(animation); } - }); + }) + .start(); } private void startQuizFromClickOn(final View view) { @@ -207,9 +219,12 @@ private void showQuizFabWithDoneIcon() { mQuizFab.setVisibility(View.VISIBLE); mQuizFab.setScaleX(0); mQuizFab.setScaleY(0); - mQuizFab.animate().scaleX(1).scaleY(1). - setInterpolator(mInterpolator) - .setListener(null); + mQuizFab.animate() + .scaleX(1) + .scaleY(1) + .setInterpolator(mInterpolator) + .setListener(null) + .start(); } }); // the toolbar should not have more elevation than the content while playing @@ -253,11 +268,14 @@ private void initLayout(String categoryId) { mQuizFab.setImageResource(R.drawable.ic_play); mQuizFab.setVisibility(mSavedStateIsPlaying ? View.GONE : View.VISIBLE); mQuizFab.setOnClickListener(mOnClickListener); - mIcon.setScaleX(0); - mIcon.setScaleY(0); mIcon.setImageResource(resId); - mIcon.animate().scaleX(1).scaleY(1).setInterpolator(mInterpolator) - .setStartDelay(300); + mIcon.animate() + .scaleX(1) + .scaleY(1) + .alpha(1) + .setInterpolator(mInterpolator) + .setStartDelay(300) + .start(); } private void initToolbar(Category category) { diff --git a/app/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.java b/app/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.java index 7cf1c410..a89a02d0 100644 --- a/app/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.java +++ b/app/src/main/java/com/google/samples/apps/topeka/fragment/SignInFragment.java @@ -21,6 +21,7 @@ import android.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.text.Editable; import android.text.TextWatcher; import android.util.Pair; @@ -157,12 +158,17 @@ public void onClick(View v) { switch (v.getId()) { case R.id.done: savePlayer(getActivity()); - if (null == mSelectedAvatarView) { - performSignInWithTransition(mAvatarGrid.getChildAt( - mSelectedAvatar.ordinal())); - } else { - performSignInWithTransition(mSelectedAvatarView); - } + removeDoneFab(new Runnable() { + @Override + public void run() { + if (null == mSelectedAvatarView) { + performSignInWithTransition(mAvatarGrid.getChildAt( + mSelectedAvatar.ordinal())); + } else { + performSignInWithTransition(mSelectedAvatarView); + } + } + }); break; default: throw new UnsupportedOperationException( @@ -173,6 +179,15 @@ public void onClick(View v) { }); } + private void removeDoneFab(@Nullable Runnable endAction) { + mDoneFab.animate() + .scaleX(0) + .scaleY(0) + .setInterpolator(new FastOutSlowInInterpolator()) + .withEndAction(endAction) + .start(); + } + private void setUpGridView(View container) { mAvatarGrid = (GridView) container.findViewById(R.id.avatars); mAvatarGrid.setAdapter(new AvatarAdapter(getActivity())); diff --git a/app/src/main/res/layout/activity_quiz.xml b/app/src/main/res/layout/activity_quiz.xml index dfc5984b..77b24b05 100644 --- a/app/src/main/res/layout/activity_quiz.xml +++ b/app/src/main/res/layout/activity_quiz.xml @@ -55,6 +55,7 @@ android:layout_gravity="center" android:transitionName="@string/transition_background"> + + android:scaleType="centerInside" + android:alpha="0" + android:scaleX="0.7" + android:scaleY="0.7"/> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/transition/quiz_enter.xml b/app/src/main/res/transition/quiz_enter.xml new file mode 100644 index 00000000..5c97d732 --- /dev/null +++ b/app/src/main/res/transition/quiz_enter.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a7d2f6b3..44e3657f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -31,6 +31,11 @@ @color/light_grey + + +