summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/ui/PositionController.java
diff options
context:
space:
mode:
authorYuli Huang <yuli@google.com>2012-03-20 16:37:05 +0800
committerYuli Huang <yuli@google.com>2012-03-21 17:29:09 +0800
commit54fe02fa80770e26d35c0e132ca23b81c99de945 (patch)
tree1fbac754ea5ae36e0ecd2d8741e283a42c75c4b3 /src/com/android/gallery3d/ui/PositionController.java
parent706a7cf399bc0297a80802a311e843e517d32241 (diff)
downloadandroid_packages_apps_Snap-54fe02fa80770e26d35c0e132ca23b81c99de945.tar.gz
android_packages_apps_Snap-54fe02fa80770e26d35c0e132ca23b81c99de945.tar.bz2
android_packages_apps_Snap-54fe02fa80770e26d35c0e132ca23b81c99de945.zip
Fix incorrect initial position/scale of opening animations.
1. Initial position of opening animation isn't correctly offset if the position repository isn't properly offset by the action bar height. 2. Initial scale of opening animation should match the thumbnail instead of using a fixed value 240. This CL is part of efforts to fix b:6016973. Change-Id: I620705357ba7594d43685e47488928f9fc93d9f6
Diffstat (limited to 'src/com/android/gallery3d/ui/PositionController.java')
-rw-r--r--src/com/android/gallery3d/ui/PositionController.java25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/com/android/gallery3d/ui/PositionController.java b/src/com/android/gallery3d/ui/PositionController.java
index 1c9aba83c..09fbc1706 100644
--- a/src/com/android/gallery3d/ui/PositionController.java
+++ b/src/com/android/gallery3d/ui/PositionController.java
@@ -17,11 +17,12 @@
package com.android.gallery3d.ui;
import android.content.Context;
+import android.graphics.Rect;
import android.graphics.RectF;
import android.util.FloatMath;
import com.android.gallery3d.common.Utils;
-import com.android.gallery3d.ui.PositionRepository.Position;
+import com.android.gallery3d.data.MediaItem;
import com.android.gallery3d.util.GalleryUtils;
class PositionController {
@@ -140,14 +141,20 @@ class PositionController {
mScaleMin = getMinimalScale(mImageW, mImageH);
- // Start animation from the saved position if we have one.
- Position position = mViewer.retrieveSavedPosition();
- if (position != null) {
- // The animation starts from 240 pixels and centers at the image
- // at the saved position.
- float scale = 240f / Math.min(width, height);
- mCurrentX = Math.round((mViewW / 2f - position.x) / scale) + mImageW / 2;
- mCurrentY = Math.round((mViewH / 2f - position.y) / scale) + mImageH / 2;
+ // Start animation from the saved rectangle if we have one.
+ Rect r = mViewer.retrieveOpenAnimationRect();
+ if (r != null) {
+ // The animation starts from the specified rectangle; the image
+ // should be scaled and centered as the thumbnail shown in the
+ // rectangle to minimize janky opening animation. Note: The below
+ // implementation depends on how thumbnails are drawn and placed.
+ float size = MediaItem.getTargetSize(
+ MediaItem.TYPE_MICROTHUMBNAIL);
+ float scale = (size / Math.min(width, height)) * Math.min(
+ r.width() / size, r.height() / size);
+
+ mCurrentX = Math.round((mViewW / 2f - r.centerX()) / scale) + mImageW / 2;
+ mCurrentY = Math.round((mViewH / 2f - r.centerY()) / scale) + mImageH / 2;
mCurrentScale = scale;
mViewer.openAnimationStarted();
startSnapback();