diff options
| author | 2010-01-28 21:24:10 -0800 | |
|---|---|---|
| committer | 2010-01-28 21:24:10 -0800 | |
| commit | a9938c4bf491cdf0df3b6b1fe41e0e3ef5a2dfbb (patch) | |
| tree | 3179bf1859d1cbe7c00428b871f999834122f6a1 | |
| parent | 05d72117f9b449914979b008c17edd6c5645565b (diff) | |
| parent | f54460576e88d7531b171575d37264dfe0a34f33 (diff) | |
Merge "Don't bounce programmatic scrolls of ScrollView and HorizontalScrollView."
| -rw-r--r-- | core/java/android/widget/HorizontalScrollView.java | 11 | ||||
| -rw-r--r-- | core/java/android/widget/ScrollView.java | 11 |
2 files changed, 14 insertions, 8 deletions
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java index 8c3923145e24..0078fecdaa72 100644 --- a/core/java/android/widget/HorizontalScrollView.java +++ b/core/java/android/widget/HorizontalScrollView.java @@ -821,10 +821,13 @@ public class HorizontalScrollView extends FrameLayout { } long duration = AnimationUtils.currentAnimationTimeMillis() - mLastScroll; if (duration > ANIMATED_SCROLL_GAP) { - int width = getWidth() - mPaddingRight - mPaddingLeft; - int right = getChildAt(0).getWidth(); - mScroller.startScroll(mScrollX, mScrollY, dx, dy, - 0, Math.max(0, right - width), 0, 0); + final int width = getWidth() - mPaddingRight - mPaddingLeft; + final int right = getChildAt(0).getWidth(); + final int maxX = Math.max(0, right - width); + final int scrollX = mScrollX; + dx = Math.max(0, Math.min(scrollX + dx, maxX)) - scrollX; + + mScroller.startScroll(scrollX, mScrollY, dx, 0); awakenScrollBars(mScroller.getDuration()); invalidate(); } else { diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index 1a50f8589eb9..4a1d8712ca2c 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -823,10 +823,13 @@ public class ScrollView extends FrameLayout { } long duration = AnimationUtils.currentAnimationTimeMillis() - mLastScroll; if (duration > ANIMATED_SCROLL_GAP) { - int height = getHeight() - mPaddingBottom - mPaddingTop; - int bottom = getChildAt(0).getHeight(); - mScroller.startScroll(mScrollX, mScrollY, dx, dy, - 0, 0, 0, Math.max(0, bottom - height)); + final int height = getHeight() - mPaddingBottom - mPaddingTop; + final int bottom = getChildAt(0).getHeight(); + final int maxY = Math.max(0, bottom - height); + final int scrollY = mScrollY; + dy = Math.max(0, Math.min(scrollY + dy, maxY)) - scrollY; + + mScroller.startScroll(mScrollX, scrollY, 0, dy); awakenScrollBars(mScroller.getDuration()); invalidate(); } else { |