Merge "Fix setCurrentPlayTime for started but not yet pulsed animations" into nyc-dev
This commit is contained in:
@@ -602,7 +602,9 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
|
|||||||
long currentTime = AnimationUtils.currentAnimationTimeMillis();
|
long currentTime = AnimationUtils.currentAnimationTimeMillis();
|
||||||
mStartTime = currentTime - seekTime;
|
mStartTime = currentTime - seekTime;
|
||||||
mStartTimeCommitted = true; // do not allow start time to be compensated for jank
|
mStartTimeCommitted = true; // do not allow start time to be compensated for jank
|
||||||
if (!mRunning) {
|
if (!isPulsingInternal()) {
|
||||||
|
// If the animation loop hasn't started, the startTime will be adjusted in the first
|
||||||
|
// frame based on seek fraction.
|
||||||
mSeekFraction = fraction;
|
mSeekFraction = fraction;
|
||||||
}
|
}
|
||||||
mOverallFraction = fraction;
|
mOverallFraction = fraction;
|
||||||
@@ -980,6 +982,10 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
|
|||||||
mStarted = true;
|
mStarted = true;
|
||||||
mPaused = false;
|
mPaused = false;
|
||||||
mRunning = false;
|
mRunning = false;
|
||||||
|
// Resets mLastFrameTime when start() is called, so that if the animation was running,
|
||||||
|
// calling start() would put the animation in the
|
||||||
|
// started-but-not-yet-reached-the-first-frame phase.
|
||||||
|
mLastFrameTime = 0;
|
||||||
AnimationHandler animationHandler = AnimationHandler.getInstance();
|
AnimationHandler animationHandler = AnimationHandler.getInstance();
|
||||||
animationHandler.addAnimationFrameCallback(this, (long) (mStartDelay * sDurationScale));
|
animationHandler.addAnimationFrameCallback(this, (long) (mStartDelay * sDurationScale));
|
||||||
|
|
||||||
@@ -1095,7 +1101,7 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void reverse() {
|
public void reverse() {
|
||||||
if (mRunning) {
|
if (isPulsingInternal()) {
|
||||||
long currentTime = AnimationUtils.currentAnimationTimeMillis();
|
long currentTime = AnimationUtils.currentAnimationTimeMillis();
|
||||||
long currentPlayTime = currentTime - mStartTime;
|
long currentPlayTime = currentTime - mStartTime;
|
||||||
long timeLeft = getScaledDuration() - currentPlayTime;
|
long timeLeft = getScaledDuration() - currentPlayTime;
|
||||||
@@ -1103,6 +1109,7 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
|
|||||||
mStartTimeCommitted = true; // do not allow start time to be compensated for jank
|
mStartTimeCommitted = true; // do not allow start time to be compensated for jank
|
||||||
mReversing = !mReversing;
|
mReversing = !mReversing;
|
||||||
} else if (mStarted) {
|
} else if (mStarted) {
|
||||||
|
mReversing = !mReversing;
|
||||||
end();
|
end();
|
||||||
} else {
|
} else {
|
||||||
start(true);
|
start(true);
|
||||||
@@ -1176,6 +1183,15 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal only: This tracks whether the animation has gotten on the animation loop. Note
|
||||||
|
* this is different than {@link #isRunning()} in that the latter tracks the time after start()
|
||||||
|
* is called (or after start delay if any), which may be before the animation loop starts.
|
||||||
|
*/
|
||||||
|
private boolean isPulsingInternal() {
|
||||||
|
return mLastFrameTime > 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the name of this animator for debugging purposes.
|
* Returns the name of this animator for debugging purposes.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user