diff options
| author | nicolasroard <nicolasroard@google.com> | 2013-09-12 10:35:17 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2013-09-12 10:35:17 -0700 |
| commit | bef578192b63f954b4f1044e59dc6d050e861017 (patch) | |
| tree | 407255cf52544d549488a29c0f57efcd3cf63db8 | |
| parent | 3c2cdb00c22fb236d09a924311cc5e19cb0f39f1 (diff) | |
| parent | cdc5ceac62eca08eed47f55b1aeb7bd01ca13cff (diff) | |
| download | android_packages_apps_Gallery2-bef578192b63f954b4f1044e59dc6d050e861017.tar.gz android_packages_apps_Gallery2-bef578192b63f954b4f1044e59dc6d050e861017.tar.bz2 android_packages_apps_Gallery2-bef578192b63f954b4f1044e59dc6d050e861017.zip | |
am cdc5ceac: am e10fd688: Fix constrained zoom
* commit 'cdc5ceac62eca08eed47f55b1aeb7bd01ca13cff':
Fix constrained zoom
| -rw-r--r-- | src/com/android/gallery3d/filtershow/imageshow/ImageShow.java | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java index 3234c2516..c981b777d 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java @@ -31,6 +31,7 @@ import android.graphics.RectF; import android.graphics.Shader; import android.graphics.drawable.NinePatchDrawable; import android.util.AttributeSet; +import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.OnDoubleTapListener; import android.view.GestureDetector.OnGestureListener; @@ -596,7 +597,6 @@ public class ImageShow extends View implements OnGestureListener, Point translation = MasterImage.getImage().getTranslation(); translation.x = (int) (originalTranslation.x + translateX); translation.y = (int) (originalTranslation.y + translateY); - constrainTranslation(translation, scaleFactor); MasterImage.getImage().setTranslation(translation); mTouchShowOriginal = false; } else if (enableComparison() && !mOriginalDisabled @@ -607,18 +607,25 @@ public class ImageShow extends View implements OnGestureListener, } } - if (action == MotionEvent.ACTION_UP) { + if (action == MotionEvent.ACTION_UP + || action == MotionEvent.ACTION_CANCEL + || action == MotionEvent.ACTION_OUTSIDE) { mInteractionMode = InteractionMode.NONE; mTouchShowOriginal = false; mTouchDown.x = 0; mTouchDown.y = 0; mTouch.x = 0; mTouch.y = 0; + float scaleFactor = MasterImage.getImage().getScaleFactor(); + Point translation = MasterImage.getImage().getTranslation(); + constrainTranslation(translation, scaleFactor); + MasterImage.getImage().setTranslation(translation); if (MasterImage.getImage().getScaleFactor() <= 1) { MasterImage.getImage().setScaleFactor(1); MasterImage.getImage().resetTranslation(); } } + invalidate(); return true; } @@ -649,15 +656,25 @@ public class ImageShow extends View implements OnGestureListener, } private void constrainTranslation(Point translation, float scale) { - float maxTranslationX = getWidth() / scale; - float maxTranslationY = getHeight() / scale; - if (Math.abs(translation.x) > maxTranslationX) { - translation.x = (int) (Math.signum(translation.x) * - maxTranslationX); - if (Math.abs(translation.y) > maxTranslationY) { - translation.y = (int) (Math.signum(translation.y) * - maxTranslationY); - } + Matrix originalToScreen = MasterImage.getImage().originalImageToScreen(); + Matrix screenToOriginal = new Matrix(); + originalToScreen.invert(screenToOriginal); + Rect originalBounds = MasterImage.getImage().getOriginalBounds(); + RectF screenPos = new RectF(originalBounds); + originalToScreen.mapRect(screenPos); + if (screenPos.right < getWidth() - mShadowMargin) { + float tx = mImageBounds.right - translation.x * scale; + translation.x = (int) ((getWidth() - mShadowMargin - tx) / scale); + } else if (screenPos.left > mShadowMargin) { + float tx = mImageBounds.left - translation.x * scale; + translation.x = (int) ((mShadowMargin - tx) / scale); + } + if (screenPos.bottom < getHeight() - mShadowMargin) { + float ty = mImageBounds.bottom - translation.y * scale; + translation.y = (int) ((getHeight() - mShadowMargin - ty) / scale); + } else if (screenPos.top > mShadowMargin) { + float ty = mImageBounds.top - translation.y * scale; + translation.y = (int) ((mShadowMargin - ty) / scale); } } @@ -733,9 +750,7 @@ public class ImageShow extends View implements OnGestureListener, Point translation = MasterImage.getImage().getTranslation(); translation.x = (int) (mOriginalTranslation.x + translateX); translation.y = (int) (mOriginalTranslation.y + translateY); - constrainTranslation(translation, scaleFactor); MasterImage.getImage().setTranslation(translation); - invalidate(); return true; } |
