Loading core/java/android/widget/OverScroller.java +8 −4 Original line number Diff line number Diff line Loading @@ -731,7 +731,7 @@ public class OverScroller { // mStartTime has been set mFinished = false; mState = CUBIC; mStart = start; mCurrentPosition = mStart = start; mFinal = end; final int delta = start - end; mDeceleration = getDeceleration(delta); Loading Loading @@ -797,7 +797,9 @@ public class OverScroller { private void fitOnBounceCurve(int start, int end, int velocity) { // Simulate a bounce that started from edge final float durationToApex = - velocity / mDeceleration; final float distanceToApex = velocity * velocity / 2.0f / Math.abs(mDeceleration); // The float cast below is necessary to avoid integer overflow. final float velocitySquared = (float) velocity * velocity; final float distanceToApex = velocitySquared / 2.0f / Math.abs(mDeceleration); final float distanceToEdge = Math.abs(end - start); final float totalDuration = (float) Math.sqrt( 2.0 * (distanceToApex + distanceToEdge) / Math.abs(mDeceleration)); Loading Loading @@ -848,12 +850,14 @@ public class OverScroller { private void onEdgeReached() { // mStart, mVelocity and mStartTime were adjusted to their values when edge was reached. float distance = mVelocity * mVelocity / (2.0f * Math.abs(mDeceleration)); // The float cast below is necessary to avoid integer overflow. final float velocitySquared = (float) mVelocity * mVelocity; float distance = velocitySquared / (2.0f * Math.abs(mDeceleration)); final float sign = Math.signum(mVelocity); if (distance > mOver) { // Default deceleration is not sufficient to slow us down before boundary mDeceleration = - sign * mVelocity * mVelocity / (2.0f * mOver); mDeceleration = - sign * velocitySquared / (2.0f * mOver); distance = mOver; } Loading Loading
core/java/android/widget/OverScroller.java +8 −4 Original line number Diff line number Diff line Loading @@ -731,7 +731,7 @@ public class OverScroller { // mStartTime has been set mFinished = false; mState = CUBIC; mStart = start; mCurrentPosition = mStart = start; mFinal = end; final int delta = start - end; mDeceleration = getDeceleration(delta); Loading Loading @@ -797,7 +797,9 @@ public class OverScroller { private void fitOnBounceCurve(int start, int end, int velocity) { // Simulate a bounce that started from edge final float durationToApex = - velocity / mDeceleration; final float distanceToApex = velocity * velocity / 2.0f / Math.abs(mDeceleration); // The float cast below is necessary to avoid integer overflow. final float velocitySquared = (float) velocity * velocity; final float distanceToApex = velocitySquared / 2.0f / Math.abs(mDeceleration); final float distanceToEdge = Math.abs(end - start); final float totalDuration = (float) Math.sqrt( 2.0 * (distanceToApex + distanceToEdge) / Math.abs(mDeceleration)); Loading Loading @@ -848,12 +850,14 @@ public class OverScroller { private void onEdgeReached() { // mStart, mVelocity and mStartTime were adjusted to their values when edge was reached. float distance = mVelocity * mVelocity / (2.0f * Math.abs(mDeceleration)); // The float cast below is necessary to avoid integer overflow. final float velocitySquared = (float) mVelocity * mVelocity; float distance = velocitySquared / (2.0f * Math.abs(mDeceleration)); final float sign = Math.signum(mVelocity); if (distance > mOver) { // Default deceleration is not sufficient to slow us down before boundary mDeceleration = - sign * mVelocity * mVelocity / (2.0f * mOver); mDeceleration = - sign * velocitySquared / (2.0f * mOver); distance = mOver; } Loading