diff options
author | Winson Chung <winsonc@google.com> | 2015-08-24 20:30:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-08-24 20:30:09 +0000 |
commit | 944bfab018a2933a046a5661a244daf605d8d5c7 (patch) | |
tree | 7500f2620bac00b0b2903d85b61256dfedfb7511 /src/com/android | |
parent | bcbc2ec2cd2673b5fca40f8458f75a7712410dda (diff) | |
parent | 51a7d965443373e3a9f4fce1c0895669ed4110bd (diff) | |
download | android_packages_apps_Trebuchet-944bfab018a2933a046a5661a244daf605d8d5c7.tar.gz android_packages_apps_Trebuchet-944bfab018a2933a046a5661a244daf605d8d5c7.tar.bz2 android_packages_apps_Trebuchet-944bfab018a2933a046a5661a244daf605d8d5c7.zip |
Merge "Making the detached scrollbar catch up faster to the actual scroll position." into ub-launcher3-burnaby
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/launcher3/allapps/AllAppsRecyclerView.java | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java index 5ec8bb258..1cde7bfc0 100644 --- a/src/com/android/launcher3/allapps/AllAppsRecyclerView.java +++ b/src/com/android/launcher3/allapps/AllAppsRecyclerView.java @@ -267,8 +267,18 @@ public class AllAppsRecyclerView extends BaseRecyclerView int diffScrollY = scrollBarY - thumbScrollY; if (diffScrollY * dy > 0f) { // User is scrolling in the same direction the thumb needs to catch up to the - // current scroll position. - thumbScrollY += dy < 0 ? Math.max(dy, diffScrollY) : Math.min(dy, diffScrollY); + // current scroll position. We do this by mapping the difference in movement + // from the original scroll bar position to the difference in movement necessary + // in the detached thumb position to ensure that both speed towards the same + // position at either end of the list. + if (dy < 0) { + int offset = (int) ((dy * thumbScrollY) / (float) scrollBarY); + thumbScrollY += Math.max(offset, diffScrollY); + } else { + int offset = (int) ((dy * (availableScrollBarHeight - thumbScrollY)) / + (float) (availableScrollBarHeight - scrollBarY)); + thumbScrollY += Math.min(offset, diffScrollY); + } thumbScrollY = Math.max(0, Math.min(availableScrollBarHeight, thumbScrollY)); mScrollbar.setThumbOffset(scrollBarX, thumbScrollY); if (scrollBarY == thumbScrollY) { |