diff options
author | Michael Jurka <mikejurka@google.com> | 2012-04-04 02:00:43 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-04-04 02:00:43 -0700 |
commit | 8544d66fe8fb76da34f7568441fb970fb2c95339 (patch) | |
tree | 03040602c1b5b33dccc38d9e8acdb6af3ded6077 | |
parent | 1a0e0ed93499ffed8a68790641d432bfd10493ee (diff) | |
parent | b06d95fc79389ce49dc97ecaae23e05d931a6ac2 (diff) | |
download | packages_apps_trebuchet-8544d66fe8fb76da34f7568441fb970fb2c95339.zip packages_apps_trebuchet-8544d66fe8fb76da34f7568441fb970fb2c95339.tar.gz packages_apps_trebuchet-8544d66fe8fb76da34f7568441fb970fb2c95339.tar.bz2 |
Merge "Fix bug where overscroll never fully snapped back"
-rw-r--r-- | src/com/android/launcher2/PagedView.java | 8 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 28 |
2 files changed, 24 insertions, 12 deletions
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java index 8a2a5a0..604e73c 100644 --- a/src/com/android/launcher2/PagedView.java +++ b/src/com/android/launcher2/PagedView.java @@ -396,7 +396,9 @@ public abstract class PagedView extends ViewGroup { protected boolean computeScrollHelper() { if (mScroller.computeScrollOffset()) { // Don't bother scrolling if the page does not need to be moved - if (mScrollX != mScroller.getCurrX() || mScrollY != mScroller.getCurrY()) { + if (mScrollX != mScroller.getCurrX() + || mScrollY != mScroller.getCurrY() + || mOverScrollX != mScroller.getCurrX()) { scrollTo(mScroller.getCurrX(), mScroller.getCurrY()); } invalidate(); @@ -755,9 +757,11 @@ public abstract class PagedView extends ViewGroup { int screenCenter = mOverScrollX + halfScreenSize; if (screenCenter != mLastScreenCenter || mForceScreenScrolled) { + // set mForceScreenScrolled before calling screenScrolled so that screenScrolled can + // set it for the next frame + mForceScreenScrolled = false; screenScrolled(screenCenter); mLastScreenCenter = screenCenter; - mForceScreenScrolled = false; } // Find out which screens are visible; as an optimization we only call draw on them diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index ba8b56f..fd3cc1f 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -171,6 +171,7 @@ public class Workspace extends SmoothPagedView private final Rect mTempRect = new Rect(); private final int[] mTempXY = new int[2]; private float mOverscrollFade = 0; + private boolean mOverscrollTransformsSet; public static final int DRAG_BITMAP_PADDING = 0; // Camera and Matrix used to determine the final position of a neighboring CellLayout @@ -1196,9 +1197,12 @@ public class Workspace extends SmoothPagedView overScrollBackgroundAlphaInterpolator(Math.abs(scrollProgress))); mOverScrollPageIndex = i; cl.setOverScrollAmount(Math.abs(scrollProgress), i == 0); - cl.setPivotX(cl.getMeasuredWidth() * (i == 0 ? 0.75f : 0.25f)); - cl.setPivotY(cl.getMeasuredHeight() * 0.5f); - cl.setOverscrollTransformsDirty(true); + if (!mOverscrollTransformsSet) { + mOverscrollTransformsSet = true; + cl.setPivotX(cl.getMeasuredWidth() * (i == 0 ? 0.75f : 0.25f)); + cl.setPivotY(cl.getMeasuredHeight() * 0.5f); + cl.setOverscrollTransformsDirty(true); + } } else if (mOverScrollPageIndex != i) { cl.setBackgroundAlphaMultiplier( backgroundAlphaInterpolator(Math.abs(scrollProgress))); @@ -1212,7 +1216,8 @@ public class Workspace extends SmoothPagedView } } } - if (!isSwitchingState() && !isInOverscroll) { + if (mOverscrollTransformsSet && !isInOverscroll) { + mOverscrollTransformsSet = false; ((CellLayout) getChildAt(0)).resetOverscrollTransforms(); ((CellLayout) getChildAt(getChildCount() - 1)).resetOverscrollTransforms(); } @@ -1226,18 +1231,21 @@ public class Workspace extends SmoothPagedView float scrollProgress = getScrollProgress(screenCenter, cl, index); cl.setOverScrollAmount(Math.abs(scrollProgress), index == 0); float rotation = - WORKSPACE_OVERSCROLL_ROTATION * scrollProgress; - cl.setCameraDistance(mDensity * CAMERA_DISTANCE); - cl.setPivotX(cl.getMeasuredWidth() * (index == 0 ? 0.75f : 0.25f)); - cl.setPivotY(cl.getMeasuredHeight() * 0.5f); cl.setRotationY(rotation); - cl.setOverscrollTransformsDirty(true); setFadeForOverScroll(Math.abs(scrollProgress)); + if (!mOverscrollTransformsSet) { + mOverscrollTransformsSet = true; + cl.setCameraDistance(mDensity * CAMERA_DISTANCE); + cl.setPivotX(cl.getMeasuredWidth() * (index == 0 ? 0.75f : 0.25f)); + cl.setPivotY(cl.getMeasuredHeight() * 0.5f); + cl.setOverscrollTransformsDirty(true); + } } else { if (mOverscrollFade != 0) { setFadeForOverScroll(0); } - // We don't want to mess with the translations during transitions - if (!isSwitchingState()) { + if (mOverscrollTransformsSet) { + mOverscrollTransformsSet = false; ((CellLayout) getChildAt(0)).resetOverscrollTransforms(); ((CellLayout) getChildAt(getChildCount() - 1)).resetOverscrollTransforms(); } |