diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2011-01-03 01:32:34 -0800 |
---|---|---|
committer | Svetoslav Ganov <svetoslavganov@google.com> | 2011-01-03 02:11:00 -0800 |
commit | 34c0688ceafbeef2648bd2287b3b3c3801679448 (patch) | |
tree | 3220f3f6864c7b7dd7bd885ede3806b5af9de83e /core/java/android/widget/NumberPicker.java | |
parent | 7eab094722af54717859b7dcce3cc050f059e00b (diff) | |
download | frameworks_base-34c0688ceafbeef2648bd2287b3b3c3801679448.zip frameworks_base-34c0688ceafbeef2648bd2287b3b3c3801679448.tar.gz frameworks_base-34c0688ceafbeef2648bd2287b3b3c3801679448.tar.bz2 |
Fixed the NumberPicker to adjust to the closest value while scrolling/flinging
Change-Id: I782603d9a187d0ce9196e3fc90f28e372637584c
Diffstat (limited to 'core/java/android/widget/NumberPicker.java')
-rw-r--r-- | core/java/android/widget/NumberPicker.java | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index 7ad0390..69bc479 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -743,11 +743,13 @@ public class NumberPicker extends LinearLayout { mSelectorElementHeight = mTextSize + selectorTextGapHeight; } - if (!mWrapSelectorWheel && y > 0 && selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] <= mMinValue) { + if (!mWrapSelectorWheel && y > 0 + && selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] <= mMinValue) { mCurrentScrollOffset = mInitialScrollOffset; return; } - if (!mWrapSelectorWheel && y < 0 && selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] >= mMaxValue) { + if (!mWrapSelectorWheel && y < 0 + && selectorIndices[SELECTOR_MIDDLE_ITEM_INDEX] >= mMaxValue) { mCurrentScrollOffset = mInitialScrollOffset; return; } @@ -1534,7 +1536,16 @@ public class NumberPicker extends LinearLayout { class AdjustScrollerCommand implements Runnable { public void run() { mPreviousScrollerY = 0; + if (mInitialScrollOffset == mCurrentScrollOffset) { + showInputControls(); + updateInputTextView(); + return; + } + // adjust to the closest value int deltaY = mInitialScrollOffset - mCurrentScrollOffset; + if (Math.abs(deltaY) > mSelectorElementHeight / 2) { + deltaY += (deltaY > 0) ? -mSelectorElementHeight : mSelectorElementHeight; + } float delayCoef = (float) Math.abs(deltaY) / (float) mTextSize; int duration = (int) (delayCoef * SELECTOR_ADJUSTMENT_DURATION_MILLIS); mAdjustScroller.startScroll(0, 0, 0, deltaY, duration); |