Fix start delay for ValueAnimator
This CL ensures that doAnimationFrame() is called the frame after start() is called, so that AnimatorSet can pulse frames into single animators as soon as they are start()'ed. Test: new cts test in same topic branch Change-Id: I4f9522ce9e1a54ca3bcad6c696e6b248c945ff90
This commit is contained in:
@@ -631,13 +631,16 @@ public class ValueAnimator extends Animator {
|
||||
public void setCurrentFraction(float fraction) {
|
||||
initAnimation();
|
||||
fraction = clampFraction(fraction);
|
||||
long seekTime = (long) (getScaledDuration() * fraction);
|
||||
long currentTime = AnimationUtils.currentAnimationTimeMillis();
|
||||
mStartTime = currentTime - seekTime;
|
||||
mStartTimeCommitted = true; // do not allow start time to be compensated for jank
|
||||
if (!isPulsingInternal()) {
|
||||
// If the animation loop hasn't started, the startTime will be adjusted in the first
|
||||
// frame based on seek fraction.
|
||||
if (isPulsingInternal()) {
|
||||
long seekTime = (long) (getScaledDuration() * fraction);
|
||||
long currentTime = AnimationUtils.currentAnimationTimeMillis();
|
||||
// Only modify the start time when the animation is running. Seek fraction will ensure
|
||||
// non-running animations skip to the correct start time.
|
||||
mStartTime = currentTime - seekTime;
|
||||
} else {
|
||||
// If the animation loop hasn't started, or during start delay, the startTime will be
|
||||
// adjusted once the delay has passed based on seek fraction.
|
||||
mSeekFraction = fraction;
|
||||
}
|
||||
mOverallFraction = fraction;
|
||||
@@ -1022,7 +1025,7 @@ public class ValueAnimator extends Animator {
|
||||
// started-but-not-yet-reached-the-first-frame phase.
|
||||
mLastFrameTime = -1;
|
||||
mFirstFrameTime = -1;
|
||||
addAnimationCallback((long) (mStartDelay * sDurationScale));
|
||||
addAnimationCallback(0);
|
||||
|
||||
if (mStartDelay == 0 || mSeekFraction >= 0 || mReversing) {
|
||||
// If there's no start delay, init the animation and notify start listeners right away
|
||||
|
||||
Reference in New Issue
Block a user