From 823a0be896057ac2c6d6741af21064b078f8196a Mon Sep 17 00:00:00 2001 From: Joren Depypere Date: Tue, 12 Jul 2016 15:59:09 +0200 Subject: [PATCH] Finish show animation before close If `.error()` or `.close()` was called before the `.show()`-animation was done (300ms), the opacity would not have a value of 1 and the error or success message might not be entirely clear. Now the show animation finishes before showing the close animation. Current delay is 300 ms, so allowing the animation to finish seems like a good solution. --- .../net/steamcrafted/loadtoast/LoadToast.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/loadtoast/src/main/java/net/steamcrafted/loadtoast/LoadToast.java b/loadtoast/src/main/java/net/steamcrafted/loadtoast/LoadToast.java index 868f531..41e317e 100644 --- a/loadtoast/src/main/java/net/steamcrafted/loadtoast/LoadToast.java +++ b/loadtoast/src/main/java/net/steamcrafted/loadtoast/LoadToast.java @@ -26,6 +26,8 @@ public class LoadToast { private boolean mToastCanceled = false; private boolean mInflated = false; private boolean mVisible = false; + private boolean mShowAnimationActive = false; + private boolean mSlideUpPending = false; public LoadToast(Context context){ @@ -87,9 +89,34 @@ public LoadToast show(){ ViewHelper.setAlpha(mView, 0f); ViewHelper.setTranslationY(mView, -mView.getHeight() + mTranslationY); //mView.setVisibility(View.VISIBLE); - ViewPropertyAnimator.animate(mView).alpha(1f).translationY(25 + mTranslationY) + ViewPropertyAnimator showAnimator = ViewPropertyAnimator.animate(mView).alpha(1f).translationY(25 + mTranslationY) .setInterpolator(new DecelerateInterpolator()) - .setDuration(300).setStartDelay(0).start(); + .setDuration(300).setStartDelay(0); + showAnimator.setListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + mShowAnimationActive = true; + } + + @Override + public void onAnimationEnd(Animator animation) { + mShowAnimationActive = false; + if (mSlideUpPending) { + slideUp(); + } + } + + @Override + public void onAnimationCancel(Animator animation) { + + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }); + showAnimator.start(); mVisible = true; checkZPosition(); @@ -130,6 +157,11 @@ private void checkZPosition(){ } private void slideUp(){ + if (mShowAnimationActive) { + mSlideUpPending = true; + return; + } + mSlideUpPending = false; ViewPropertyAnimator.animate(mView).setStartDelay(1000).alpha(0f) .translationY(-mView.getHeight() + mTranslationY) .setInterpolator(new AccelerateInterpolator())