diff options
author | Tony Wickham <twickham@google.com> | 2016-04-07 18:46:44 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2016-05-12 16:28:24 -0700 |
commit | 8f7ead3e94d0550beb85b83a8c1d5e78a9abd69f (patch) | |
tree | 8e9e0b0f749de24f74f279acdef94baac0efdddc | |
parent | 6dc98b9dc01f8e5cf5729b958f348af37e0117c6 (diff) | |
download | android_packages_apps_Trebuchet-8f7ead3e94d0550beb85b83a8c1d5e78a9abd69f.tar.gz android_packages_apps_Trebuchet-8f7ead3e94d0550beb85b83a8c1d5e78a9abd69f.tar.bz2 android_packages_apps_Trebuchet-8f7ead3e94d0550beb85b83a8c1d5e78a9abd69f.zip |
Update page when scrolling/flinging in free-scroll.
Bug: 28054048
Change-Id: Ic22e7e717c3ead52dd6fb7495c37be3837e11030
-rw-r--r-- | src/com/android/launcher3/PagedView.java | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 6f7566f10..e1cb08220 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -400,7 +400,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } scrollTo(newX, 0); mScroller.setFinalX(newX); - forceFinishScroller(); + forceFinishScroller(true); } private void abortScrollerAnimation(boolean resetNextPage) { @@ -412,11 +412,13 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } } - private void forceFinishScroller() { + private void forceFinishScroller(boolean resetNextPage) { mScroller.forceFinished(true); // We need to clean up the next page here to avoid computeScrollHelper from // updating current page on the pass. - mNextPage = INVALID_PAGE; + if (resetNextPage) { + mNextPage = INVALID_PAGE; + } } private int validateNewPage(int newPage) { @@ -538,7 +540,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc // in the free scroll mode, we make sure to end the scroll operation. if (!mScroller.isFinished() && (x > mFreeScrollMaxScrollX || x < mFreeScrollMinScrollX)) { - forceFinishScroller(); + forceFinishScroller(false); } x = Math.min(x, mFreeScrollMaxScrollX); @@ -1534,6 +1536,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } private void setEnableFreeScroll(boolean freeScroll) { + boolean wasFreeScroll = mFreeScroll; mFreeScroll = freeScroll; if (mFreeScroll) { @@ -1544,6 +1547,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } else if (getCurrentPage() > mTempVisiblePagesRange[1]) { setCurrentPage(mTempVisiblePagesRange[1]); } + } else if (wasFreeScroll) { + snapToPage(getNextPage()); } setEnableOverscroll(!freeScroll); @@ -1776,6 +1781,7 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc mScroller.setInterpolator(mDefaultInterpolator); mScroller.fling(initialScrollX, getScrollY(), vX, 0, Integer.MIN_VALUE, Integer.MAX_VALUE, 0, 0); + mNextPage = getPageNearestToCenterOfScreen((int) (mScroller.getFinalX() / scaleX)); invalidate(); } onScrollInteractionEnd(); @@ -1936,9 +1942,13 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc } int getPageNearestToCenterOfScreen() { + return getPageNearestToCenterOfScreen(getScrollX()); + } + + private int getPageNearestToCenterOfScreen(int scaledScrollX) { + int screenCenter = getViewportOffsetX() + scaledScrollX + (getViewportWidth() / 2); int minDistanceFromScreenCenter = Integer.MAX_VALUE; int minDistanceFromScreenCenterIndex = -1; - int screenCenter = getViewportOffsetX() + getScrollX() + (getViewportWidth() / 2); final int childCount = getChildCount(); for (int i = 0; i < childCount; ++i) { View layout = (View) getPageAt(i); |