Updating floating animation target if layout changes during the animation
Bug: 131360075 Change-Id: Id71e154aa59177955baa9daab00ecf11ee7d8c43
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user