diff options
author | emancebo <emancebo@cyngn.com> | 2014-10-30 12:30:01 -0700 |
---|---|---|
committer | emancebo <emancebo@cyngn.com> | 2014-10-30 12:30:01 -0700 |
commit | 505a135d1e76a3f0f541e93dd94a52b0291bfd2d (patch) | |
tree | 02c0e44d56f30555893f12105015bf1a68ff246d | |
parent | 3cb59cabce911b71087f76888f86696026730585 (diff) | |
download | android_external_cyanogen_UICommon-505a135d1e76a3f0f541e93dd94a52b0291bfd2d.tar.gz android_external_cyanogen_UICommon-505a135d1e76a3f0f541e93dd94a52b0291bfd2d.tar.bz2 android_external_cyanogen_UICommon-505a135d1e76a3f0f541e93dd94a52b0291bfd2d.zip |
UICommon: add listener on list scrubber to get notified when it fades in or out
Change-Id: Iad54a1f5db547b09ecffaaba1fb40ffcce1c3749
-rw-r--r-- | src/com/cyngn/uicommon/animation/FadeUtil.java | 82 | ||||
-rw-r--r-- | src/com/cyngn/uicommon/view/ListScrubber.java | 49 | ||||
-rw-r--r-- | src/com/cyngn/uicommon/view/ListScrubberFadeHelper.java | 24 |
3 files changed, 153 insertions, 2 deletions
diff --git a/src/com/cyngn/uicommon/animation/FadeUtil.java b/src/com/cyngn/uicommon/animation/FadeUtil.java new file mode 100644 index 0000000..4446b81 --- /dev/null +++ b/src/com/cyngn/uicommon/animation/FadeUtil.java @@ -0,0 +1,82 @@ +package com.cyngn.uicommon.animation; + +import android.animation.Animator; +import android.animation.ObjectAnimator; +import android.view.View; + +/** + * Utility for fading a view in and out + */ +public class FadeUtil { + + public static final int DEFAULT_FADE_DURATION = 200; + + /** + * Makes view visible and transitions alpha from 0 to 1. Does nothing if view is + * already visible. + * + * @param view + * @param duration + */ + public static void fadeIn(View view, int duration) { + if (view.getVisibility() == View.VISIBLE) { + return; + } + view.setAlpha(0); + view.setVisibility(View.VISIBLE); + ObjectAnimator anim = ObjectAnimator.ofFloat(view, "alpha", 0, 1); + anim.setDuration(DEFAULT_FADE_DURATION); + anim.start(); + } + + /** + * Fade in with default duration + * + * @param view + */ + public static void fadeIn(View view) { + fadeIn(view, DEFAULT_FADE_DURATION); + } + + /** + * Transitions alpha from 1 to 0 and then sets visibility to gone + * + * @param view + * @param duration + */ + public static void fadeOut(final View view, int duration) { + ObjectAnimator anim = ObjectAnimator.ofFloat(view, "alpha", 1, 0); + anim.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + view.setVisibility(View.GONE); + } + + @Override + public void onAnimationCancel(Animator animation) { + + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }); + anim.setDuration(DEFAULT_FADE_DURATION); + anim.start(); + } + + /** + * Fade out with default duration + * + * @param view + */ + public static void fadeOut(View view) { + fadeOut(view, DEFAULT_FADE_DURATION); + } +} diff --git a/src/com/cyngn/uicommon/view/ListScrubber.java b/src/com/cyngn/uicommon/view/ListScrubber.java index f4e9596..f4517f4 100644 --- a/src/com/cyngn/uicommon/view/ListScrubber.java +++ b/src/com/cyngn/uicommon/view/ListScrubber.java @@ -54,6 +54,47 @@ public class ListScrubber extends LinearLayout implements OnClickListener { private int mHeaderCount = 0; private boolean mFadeInOnMotion; private ListScrubberFadeHelper mFadeHelper; + private ListScrubberListener mListener; + + public static interface ListScrubberListener { + + /** + * Called when list scrubber is beginning to fade in + */ + public void onAppearing(); + + /** + * List scrubber is fully visible + */ + public void onAppeared(); + + /** + * Called when list scrubber is beginning to fade out + */ + public void onDisappearing(); + + /** + * List scrubber is fully gone + */ + public void onDisappeared(); + } + + /** + * Convenience implementation of list scrubber listener that does nothing + */ + public static class DefaultListScrubberListener implements ListScrubberListener { + @Override + public void onDisappeared() {} + + @Override + public void onDisappearing() {} + + @Override + public void onAppeared() {} + + @Override + public void onAppearing() {} + } public ListScrubber(Context context) { super(context); @@ -187,6 +228,7 @@ public class ListScrubber extends LinearLayout implements OnClickListener { public void setFadeInOnMotion(boolean fadeInOnMotion) { if (fadeInOnMotion) { mFadeHelper = new ListScrubberFadeHelper(mScrubberWidget); + mFadeHelper.setListScrubberListener(mListener); mFadeHelper.updateState(ListScrubberFadeHelper.State.HIDDEN); } else { @@ -230,4 +272,11 @@ public class ListScrubber extends LinearLayout implements OnClickListener { public void setHeaderCount(int count) { mHeaderCount = count; } + + public void setListScrubberListener(ListScrubberListener listener) { + mListener = listener; + if (mFadeHelper != null) { + mFadeHelper.setListScrubberListener(listener); + } + } }
\ No newline at end of file diff --git a/src/com/cyngn/uicommon/view/ListScrubberFadeHelper.java b/src/com/cyngn/uicommon/view/ListScrubberFadeHelper.java index 7b20c5c..71530dc 100644 --- a/src/com/cyngn/uicommon/view/ListScrubberFadeHelper.java +++ b/src/com/cyngn/uicommon/view/ListScrubberFadeHelper.java @@ -21,6 +21,8 @@ import android.animation.AnimatorListenerAdapter; import android.os.Handler; import android.view.View; import android.view.ViewGroup; +import com.cyngn.uicommon.animation.FadeUtil; +import com.cyngn.uicommon.view.ListScrubber.ListScrubberListener; /** * State machine to manage fading the list scrubber in and out when the user interacts @@ -51,6 +53,7 @@ public class ListScrubberFadeHelper { private Handler mHandler; private Runnable mFadeOutRunnable; private State mState; + private ListScrubberListener mListener; class FadeOutRunnable implements Runnable { @Override @@ -102,19 +105,29 @@ public class ListScrubberFadeHelper { case VISIBLE: mScrubber.setAlpha(1f); mScrubber.setVisibility(View.VISIBLE); + if (mListener != null) { + mListener.onAppeared(); + } break; case HIDDEN: mScrubber.setAlpha(0f); mScrubber.setVisibility(View.INVISIBLE); + if (mListener != null) { + mListener.onDisappeared(); + } break; case FADING_IN: - mScrubber.animate().alpha(1f).setDuration(200) + if (mListener != null) { + mListener.onAppearing(); + } + mScrubber.animate().alpha(1f).setDuration(FadeUtil.DEFAULT_FADE_DURATION) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { // strange that this is required... updateState(State.VISIBLE); } + @Override public void onAnimationCancel(Animator animation) { updateState(State.VISIBLE); @@ -122,7 +135,10 @@ public class ListScrubberFadeHelper { }); break; case FADING_OUT: - mScrubber.animate().alpha(0f).setDuration(200) + if (mListener != null) { + mListener.onDisappearing(); + } + mScrubber.animate().alpha(0f).setDuration(FadeUtil.DEFAULT_FADE_DURATION) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { @@ -149,4 +165,8 @@ public class ListScrubberFadeHelper { } mScrubber.animate().cancel(); } + + public void setListScrubberListener(ListScrubberListener listener) { + mListener = listener; + } } |