summaryrefslogtreecommitdiffstats
path: root/core/java/android/widget/NumberPicker.java
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2011-01-03 01:32:34 -0800
committerSvetoslav Ganov <svetoslavganov@google.com>2011-01-03 02:11:00 -0800
commit34c0688ceafbeef2648bd2287b3b3c3801679448 (patch)
tree3220f3f6864c7b7dd7bd885ede3806b5af9de83e /core/java/android/widget/NumberPicker.java
parent7eab094722af54717859b7dcce3cc050f059e00b (diff)
downloadframeworks_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.java15
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);