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
+
+
+