diff options
author | Adam Cohen <adamcohen@google.com> | 2011-03-01 15:27:19 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-03-01 15:27:19 -0800 |
commit | e0d23e6fdc095f4aff11817e41f6c07a36d44fff (patch) | |
tree | 35d5ade022e4c116e3b52b23c0dd2b4f148b14c7 | |
parent | 606ecf3e9f27c8f69a398ea4d83d842df50d094f (diff) | |
parent | a8a7c92b3689cb90d72d03c0162bca848b19c392 (diff) | |
download | frameworks_base-e0d23e6fdc095f4aff11817e41f6c07a36d44fff.zip frameworks_base-e0d23e6fdc095f4aff11817e41f6c07a36d44fff.tar.gz frameworks_base-e0d23e6fdc095f4aff11817e41f6c07a36d44fff.tar.bz2 |
Merge "Adding mouse scroll wheel support to StackView"
-rw-r--r-- | core/java/android/widget/StackView.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java index e6cf31e..bab469b 100644 --- a/core/java/android/widget/StackView.java +++ b/core/java/android/widget/StackView.java @@ -33,6 +33,7 @@ import android.graphics.Region; import android.graphics.TableMaskFilter; import android.util.AttributeSet; import android.util.Log; +import android.view.InputDevice; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; @@ -114,6 +115,8 @@ public class StackView extends AdapterViewAnimator { private static final int MIN_TIME_BETWEEN_INTERACTION_AND_AUTOADVANCE = 5000; + private static long MIN_TIME_BETWEEN_SCROLLS = 100; + /** * These variables are all related to the current state of touch interaction * with the stack @@ -137,6 +140,7 @@ public class StackView extends AdapterViewAnimator { private StackSlider mStackSlider; private boolean mFirstLayoutHappened = false; private long mLastInteractionTime = 0; + private long mLastScrollTime; private int mStackMode; private int mFramePadding; private final Rect stackInvalidateRect = new Rect(); @@ -565,6 +569,38 @@ public class StackView extends AdapterViewAnimator { } } + @Override + public boolean onGenericMotionEvent(MotionEvent event) { + if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) { + switch (event.getAction()) { + case MotionEvent.ACTION_SCROLL: { + final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL); + if (vscroll < 0) { + pacedScroll(false); + return true; + } else if (vscroll > 0) { + pacedScroll(true); + return true; + } + } + } + } + return super.onGenericMotionEvent(event); + } + + // This ensures that the frequency of stack flips caused by scrolls is capped + private void pacedScroll(boolean up) { + long timeSinceLastScroll = System.currentTimeMillis() - mLastScrollTime; + if (timeSinceLastScroll > MIN_TIME_BETWEEN_SCROLLS) { + if (up) { + showPrevious(); + } else { + showNext(); + } + mLastScrollTime = System.currentTimeMillis(); + } + } + /** * {@inheritDoc} */ |