Fixed image stuck after zoom end between max and min

This commit is contained in:
DrKLO 2014-06-11 03:33:45 +04:00
parent 0c49c20656
commit 512aeaf2bb
2 changed files with 31 additions and 18 deletions

View file

@ -81,7 +81,7 @@ android {
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 243
versionCode 244
versionName "1.4.15"
}
}

View file

@ -142,6 +142,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
private boolean doubleTap = false;
private boolean invalidCoords = false;
private boolean canDragDown = true;
private boolean zoomAnimation = false;
private int switchImageAfterAnimation = 0;
private VelocityTracker velocityTracker = null;
@ -1409,20 +1410,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
doubleTap = false;
moving = false;
zooming = false;
float moveToX = translationX;
float moveToY = translationY;
updateMinMax(scale);
if (translationX < minX) {
moveToX = minX;
} else if (translationX > maxX) {
moveToX = maxX;
}
if (translationY < minY) {
moveToY = minY;
} else if (translationY > maxY) {
moveToY = maxY;
}
animateTo(scale, moveToX, moveToY);
checkMinMax(false);
return true;
}
@ -1515,7 +1503,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
invalidCoords = true;
if (scale < 1.0f) {
updateMinMax(1.0f);
animateTo(1.0f, 0, 0);
animateTo(1.0f, 0, 0, true);
} else if(scale > 3.0f) {
float atx = (pinchCenterX - containerView.getWidth() / 2) - ((pinchCenterX - containerView.getWidth() / 2) - pinchStartX) * (3.0f / pinchStartScale);
float aty = (pinchCenterY - containerView.getHeight() / 2) - ((pinchCenterY - containerView.getHeight() / 2) - pinchStartY) * (3.0f / pinchStartScale);
@ -1530,7 +1518,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
} else if (aty > maxY) {
aty = maxY;
}
animateTo(3.0f, atx, aty);
animateTo(3.0f, atx, aty, true);
} else {
checkMinMax(true);
}
zooming = false;
} else if (draggingDown) {
@ -1579,6 +1569,23 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
return false;
}
private void checkMinMax(boolean zoom) {
float moveToX = translationX;
float moveToY = translationY;
updateMinMax(scale);
if (translationX < minX) {
moveToX = minX;
} else if (translationX > maxX) {
moveToX = maxX;
}
if (translationY < minY) {
moveToY = minY;
} else if (translationY > maxY) {
moveToY = maxY;
}
animateTo(scale, moveToX, moveToY, zoom);
}
private void goToNext() {
float extra = 0;
if (scale != 1) {
@ -1598,6 +1605,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
}
private void animateTo(float newScale, float newTx, float newTy) {
animateTo(newScale, newTx, newTy, false);
}
private void animateTo(float newScale, float newTx, float newTy, boolean isZoom) {
if (switchImageAfterAnimation == 0) {
toggleOverlayView(true);
}
@ -1605,6 +1616,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
Utilities.unlockOrientation(parentActivity);
return;
}
zoomAnimation = isZoom;
animateToScale = newScale;
animateToX = newTx;
animateToY = newTy;
@ -1655,6 +1667,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
animationStartTime = 0;
updateMinMax(scale);
Utilities.unlockOrientation(parentActivity);
zoomAnimation = false;
}
if (switchImageAfterAnimation != 0) {
if (switchImageAfterAnimation == 1) {
@ -1710,7 +1723,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
sideImage = rightImage;
}
if (sideImage != null) {
if (!zoomAnimation && !zooming && sideImage != null) {
changingPage = true;
canvas.translate(k * containerView.getWidth() / 2, -currentTranslationY);
canvas.scale(1.0f / scale, 1.0f / scale);