summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorVladislav Kaznacheev <kaznacheev@google.com>2015-08-04 10:57:04 -0700
committerVladislav Kaznacheev <kaznacheev@google.com>2015-08-04 21:24:59 +0000
commit84ad7e9ee2a2f1927fc54dcf94852a764d39bf64 (patch)
tree571ec585b18f74645e170e8464024ef453f303e6 /core
parentfc5a4bf0e1520bf3acd75226d760b8e1d7cdd59f (diff)
downloadframeworks_base-84ad7e9ee2a2f1927fc54dcf94852a764d39bf64.zip
frameworks_base-84ad7e9ee2a2f1927fc54dcf94852a764d39bf64.tar.gz
frameworks_base-84ad7e9ee2a2f1927fc54dcf94852a764d39bf64.tar.bz2
Keep OverScroller.SplineOverScroller state consistent.
Currently update() bails out early if it is called too soon after mStartTime has been set. In this case mCurrentPosition remains holding an obsolete value from a previous animation. This causes some strange behavior (see the referenced bug). This patch makes sure that mCurrentPosition is updated every time that mStart is updated. Bug: 22950559 Change-Id: I07b92f30ebe29856f4e04dc19a4820123713fd7e
Diffstat (limited to 'core')
-rw-r--r--core/java/android/widget/OverScroller.java8
1 files changed, 4 insertions, 4 deletions
diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java
index 98bfd7d..50569d7 100644
--- a/core/java/android/widget/OverScroller.java
+++ b/core/java/android/widget/OverScroller.java
@@ -678,7 +678,7 @@ public class OverScroller {
void startScroll(int start, int distance, int duration) {
mFinished = false;
- mStart = start;
+ mCurrentPosition = mStart = start;
mFinal = start + distance;
mStartTime = AnimationUtils.currentAnimationTimeMillis();
@@ -712,7 +712,7 @@ public class OverScroller {
boolean springback(int start, int min, int max) {
mFinished = true;
- mStart = mFinal = start;
+ mCurrentPosition = mStart = mFinal = start;
mVelocity = 0;
mStartTime = AnimationUtils.currentAnimationTimeMillis();
@@ -804,7 +804,7 @@ public class OverScroller {
final float totalDuration = (float) Math.sqrt(
2.0 * (distanceToApex + distanceToEdge) / Math.abs(mDeceleration));
mStartTime -= (int) (1000.0f * (totalDuration - durationToApex));
- mStart = end;
+ mCurrentPosition = mStart = end;
mVelocity = (int) (- mDeceleration * totalDuration);
}
@@ -873,7 +873,7 @@ public class OverScroller {
// Duration from start to null velocity
if (mDuration < mSplineDuration) {
// If the animation was clamped, we reached the edge
- mStart = mFinal;
+ mCurrentPosition = mStart = mFinal;
// TODO Better compute speed when edge was reached
mVelocity = (int) mCurrVelocity;
mDeceleration = getDeceleration(mVelocity);