From f54460576e88d7531b171575d37264dfe0a34f33 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Thu, 28 Jan 2010 17:24:56 -0800 Subject: Don't bounce programmatic scrolls of ScrollView and HorizontalScrollView. --- core/java/android/widget/HorizontalScrollView.java | 11 +++++++---- 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 { -- cgit v1.2.3-59-g8ed1b