summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremancebo <emancebo@cyngn.com>2014-10-30 12:30:01 -0700
committeremancebo <emancebo@cyngn.com>2014-10-30 12:30:01 -0700
commit505a135d1e76a3f0f541e93dd94a52b0291bfd2d (patch)
tree02c0e44d56f30555893f12105015bf1a68ff246d
parent3cb59cabce911b71087f76888f86696026730585 (diff)
downloadandroid_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.java82
-rw-r--r--src/com/cyngn/uicommon/view/ListScrubber.java49
-rw-r--r--src/com/cyngn/uicommon/view/ListScrubberFadeHelper.java24
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;
+ }
}