Updating floating animation target if layout changes during the animation

Bug: 131360075
Change-Id: Id71e154aa59177955baa9daab00ecf11ee7d8c43
This commit is contained in:
Sunny Goyal
2019-05-03 13:20:30 -07:00
parent 1bdb0f4046
commit abb55950f6
4 changed files with 101 additions and 25 deletions
@@ -36,6 +36,8 @@ public class FlingSpringAnim {
private final FlingAnimation mFlingAnim;
private SpringAnimation mSpringAnim;
private float mTargetPosition;
public <K> FlingSpringAnim(K object, FloatPropertyCompat<K> property, float startPosition,
float targetPosition, float startVelocity, OnAnimationEndListener onEndListener) {
mFlingAnim = new FlingAnimation(object, property)
@@ -44,10 +46,12 @@ public class FlingSpringAnim {
.setStartVelocity(startVelocity)
.setMinValue(Math.min(startPosition, targetPosition))
.setMaxValue(Math.max(startPosition, targetPosition));
mTargetPosition = targetPosition;
mFlingAnim.addEndListener(((animation, canceled, value, velocity) -> {
mSpringAnim = new SpringAnimation(object, property)
.setStartVelocity(velocity)
.setSpring(new SpringForce(targetPosition)
.setSpring(new SpringForce(mTargetPosition)
.setStiffness(SPRING_STIFFNESS)
.setDampingRatio(SPRING_DAMPING));
mSpringAnim.addEndListener(onEndListener);
@@ -55,6 +59,19 @@ public class FlingSpringAnim {
}));
}
public float getTargetPosition() {
return mTargetPosition;
}
public void updatePosition(float startPosition, float targetPosition) {
mFlingAnim.setMinValue(Math.min(startPosition, targetPosition))
.setMaxValue(Math.max(startPosition, targetPosition));
mTargetPosition = targetPosition;
if (mSpringAnim != null) {
mSpringAnim.animateToFinalPosition(mTargetPosition);
}
}
public void start() {
mFlingAnim.start();
}