From 3976dea546ab53e050f2388a0a75916bbcfcd6d0 Mon Sep 17 00:00:00 2001 From: Yuli Huang Date: Thu, 1 Mar 2012 16:51:08 +0800 Subject: Fix b/6064909: Photo might not be snapped back correctly. Photo might not be snapped back if the animation wasn't actually started because of no position/scale changes. Change-Id: I6b5e938bffd954b848cae04514a06d0427151025 --- .../android/gallery3d/ui/PositionController.java | 36 +++++++++++++--------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'src/com/android/gallery3d/ui/PositionController.java') diff --git a/src/com/android/gallery3d/ui/PositionController.java b/src/com/android/gallery3d/ui/PositionController.java index 236c8aa72..4baa2e0ed 100644 --- a/src/com/android/gallery3d/ui/PositionController.java +++ b/src/com/android/gallery3d/ui/PositionController.java @@ -400,8 +400,12 @@ class PositionController { private void startAnimation( int targetX, int targetY, float scale, int kind) { + mAnimationKind = kind; if (targetX == mCurrentX && targetY == mCurrentY - && scale == mCurrentScale) return; + && scale == mCurrentScale) { + onAnimationComplete(); + return; + } mFromX = mCurrentX; mFromY = mCurrentY; @@ -420,25 +424,18 @@ class PositionController { } mAnimationStartTime = SystemClock.uptimeMillis(); - mAnimationKind = kind; if (mAnimationKind != ANIM_KIND_FLING) { mAnimationDuration = ANIM_TIME[mAnimationKind]; } - if (advanceAnimation()) mViewer.invalidate(); + advanceAnimation(); } - // Returns true if redraw is needed. - public boolean advanceAnimation() { + public void advanceAnimation() { if (mAnimationStartTime == NO_ANIMATION) { - return false; + return; } else if (mAnimationStartTime == LAST_ANIMATION) { - mAnimationStartTime = NO_ANIMATION; - if (mViewer.isInTransition()) { - mViewer.notifyTransitionComplete(); - return false; - } else { - return startSnapbackIfNeeded(); - } + onAnimationComplete(); + return; } long now = SystemClock.uptimeMillis(); @@ -478,7 +475,16 @@ class PositionController { } } mViewer.setPosition(mCurrentX, mCurrentY, mCurrentScale); - return true; + mViewer.invalidate(); + } + + private void onAnimationComplete() { + mAnimationStartTime = NO_ANIMATION; + if (mViewer.isInTransition()) { + mViewer.notifyTransitionComplete(); + } else { + if (startSnapbackIfNeeded()) mViewer.invalidate(); + } } private void flingInterpolate(float progress) { @@ -545,7 +551,7 @@ class PositionController { return startSnapback(); } - public boolean startSnapback() { + private boolean startSnapback() { boolean needAnimation = false; float scale = mCurrentScale; -- cgit v1.2.3