package com.distantfuture.videos.misc; import android.os.Handler; import android.os.Looper; import android.view.View; import android.view.animation.AnimationUtils; import android.widget.AbsListView; public class ScrollTriggeredAnimator { private final Handler mHandler = new Handler(Looper.getMainLooper()); private int mInDuration; private int mOutDuration; private View mAnimationTarget; private boolean mGlowing = false; private final Runnable mBackgroundDimmerFadeRunnable = new Runnable() { @Override public void run() { mGlowing = false; mAnimationTarget.animate().setDuration(mOutDuration).alpha(1); } }; public ScrollTriggeredAnimator(AbsListView absListView, View animationTarget) { super(); mAnimationTarget = animationTarget; int scrollBarPanelFadeDuration = 250; // ViewConfiguration.getScrollBarFadeDuration(); mInDuration = scrollBarPanelFadeDuration; mOutDuration = scrollBarPanelFadeDuration * 4; absListView.setOnScrollListener(setupListener()); } private AbsListView.OnScrollListener setupListener() { // listen for scroll, animate glow effect AbsListView.OnScrollListener listener = new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case SCROLL_STATE_IDLE: if (mGlowing) { mHandler.removeCallbacks(mBackgroundDimmerFadeRunnable); mHandler.postAtTime(mBackgroundDimmerFadeRunnable, AnimationUtils.currentAnimationTimeMillis()); } break; case SCROLL_STATE_TOUCH_SCROLL: // kill any animation waiting to happen mHandler.removeCallbacks(mBackgroundDimmerFadeRunnable); // make it glow bright if (!mGlowing) { mGlowing = true; mAnimationTarget.animate().setDuration(mInDuration).alpha(0); } break; case SCROLL_STATE_FLING: break; default: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }; return listener; } }