Remove animation listener while paused.
Bug 27418573 While an animator was paused, it continued to receive Choreographer callbacks. This has been changed now so that after the first callback, it is removed. Change-Id: If73483404b38f1f354a63fc98d07696f442987e6
This commit is contained in:
@@ -1029,8 +1029,16 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
|
||||
|
||||
@Override
|
||||
public void resume() {
|
||||
if (mPaused) {
|
||||
if (Looper.myLooper() == null) {
|
||||
throw new AndroidRuntimeException("Animators may only be resumed from the same " +
|
||||
"thread that the animator was started on");
|
||||
}
|
||||
if (mPaused && !mResumed) {
|
||||
mResumed = true;
|
||||
if (mPauseTime > 0) {
|
||||
AnimationHandler handler = AnimationHandler.getInstance();
|
||||
handler.addAnimationFrameCallback(this, 0);
|
||||
}
|
||||
}
|
||||
super.resume();
|
||||
}
|
||||
@@ -1235,9 +1243,8 @@ public class ValueAnimator extends Animator implements AnimationHandler.Animatio
|
||||
}
|
||||
mLastFrameTime = frameTime;
|
||||
if (mPaused) {
|
||||
if (mPauseTime < 0) {
|
||||
mPauseTime = frameTime;
|
||||
}
|
||||
mPauseTime = frameTime;
|
||||
handler.removeCallback(this);
|
||||
return;
|
||||
} else if (mResumed) {
|
||||
mResumed = false;
|
||||
|
||||
@@ -328,7 +328,12 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn
|
||||
// Only a1's pause listener should be called.
|
||||
assertTrue(l1.pauseCalled);
|
||||
assertFalse(l1.resumeCalled);
|
||||
a1.resume();
|
||||
runTestOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
a1.resume();
|
||||
}
|
||||
});
|
||||
|
||||
Thread.sleep(a1.getTotalDuration());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user