Let spring take over the overscroll amount when swiping to first/last page.

Bug: 153747836
Change-Id: I8a883f648587b0cb4008df3b8176c9341162b8d1
This commit is contained in:
Jon Miranda
2020-04-10 13:38:14 -07:00
parent 0c0a9ae366
commit 57dab6fa29
3 changed files with 22 additions and 9 deletions

View File

@@ -131,8 +131,8 @@
<item name="dismiss_task_trans_x_damping_ratio" type="dimen" format="float">0.5</item>
<item name="dismiss_task_trans_x_stiffness" type="dimen" format="float">1500</item>
<item name="horizontal_spring_damping_ratio" type="dimen" format="float">0.75</item>
<item name="horizontal_spring_stiffness" type="dimen" format="float">200</item>
<item name="horizontal_spring_damping_ratio" type="dimen" format="float">0.8</item>
<item name="horizontal_spring_stiffness" type="dimen" format="float">400</item>
<item name="swipe_up_rect_scale_damping_ratio" type="dimen" format="float">0.75</item>
<item name="swipe_up_rect_scale_stiffness" type="dimen" format="float">200</item>

View File

@@ -1069,16 +1069,28 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
}
}
/**
* Returns the amount of overscroll caused by the spring in {@link OverScroller}.
*/
private int getSpringOverScroll(int amount) {
if (mScroller.isSpringing()) {
return amount < 0
? mScroller.getCurrPos()
: Math.max(0, mScroller.getCurrPos() - mMaxScroll);
} else {
return 0;
}
}
protected void dampedOverScroll(int amount) {
mSpringOverScroll = amount;
if (amount == 0) {
return;
}
int size = mOrientationHandler.getMeasuredSize(this);
int overScrollAmount = OverScroll.dampedScroll(amount, size);
mSpringOverScroll = overScrollAmount;
if (mScroller.isSpringing()) {
mSpringOverScroll = getSpringOverScroll(amount);
invalidate();
return;
}
@@ -1090,8 +1102,8 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
}
protected void overScroll(int amount) {
mSpringOverScroll = amount;
if (mScroller.isSpringing()) {
mSpringOverScroll = getSpringOverScroll(amount);
invalidate();
return;
}

View File

@@ -561,10 +561,11 @@ public class OverScroller {
mStartTime = AnimationUtils.currentAnimationTimeMillis();
mDuration = duration;
if (mSpring != null) {
mSpring.cancel();
}
if (mState == SPRING) {
if (mSpring != null) {
mSpring.cancel();
}
mSpring = new SpringAnimation(this, SPRING_PROPERTY);
ResourceProvider rp = DynamicResource.provider(mContext);
@@ -576,9 +577,9 @@ public class OverScroller {
mSpring.setStartVelocity(velocity);
mSpring.animateToFinalPosition(mFinal);
mSpring.addEndListener((animation, canceled, value, velocity1) -> {
mSpring = null;
finish();
mState = SPLINE;
mSpring = null;
});
}
// Unused