summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/ui/PositionController.java
diff options
context:
space:
mode:
authorYuli Huang <yuli@google.com>2012-03-01 16:51:08 +0800
committerYuli Huang <yuli@google.com>2012-03-01 16:51:08 +0800
commit3976dea546ab53e050f2388a0a75916bbcfcd6d0 (patch)
tree273a83a878a5b5807a41c70c654f15a8b11e53aa /src/com/android/gallery3d/ui/PositionController.java
parent75e11d5b2c22efe9c699d5340b365fa9f08da2cd (diff)
downloadandroid_packages_apps_Snap-3976dea546ab53e050f2388a0a75916bbcfcd6d0.tar.gz
android_packages_apps_Snap-3976dea546ab53e050f2388a0a75916bbcfcd6d0.tar.bz2
android_packages_apps_Snap-3976dea546ab53e050f2388a0a75916bbcfcd6d0.zip
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
Diffstat (limited to 'src/com/android/gallery3d/ui/PositionController.java')
-rw-r--r--src/com/android/gallery3d/ui/PositionController.java36
1 files changed, 21 insertions, 15 deletions
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;