diff options
-rw-r--r-- | core/java/android/widget/FastScroller.java | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index 06b7a93..0687905 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -1205,7 +1205,6 @@ class FastScroller { if (!hasSections || !mMatchDragPosition) { return (float) firstVisibleItem / (totalItemCount - visibleItemCount); } - // Ignore headers. firstVisibleItem -= mHeaderCount; if (firstVisibleItem < 0) { @@ -1255,9 +1254,19 @@ class FastScroller { // across the last item account for whatever space is remaining. if (firstVisibleItem > 0 && firstVisibleItem + visibleItemCount == totalItemCount) { final View lastChild = mList.getChildAt(visibleItemCount - 1); - final float lastItemVisible = (float) (mList.getHeight() - mList.getPaddingBottom() - - lastChild.getTop()) / lastChild.getHeight(); - result += (1 - result) * lastItemVisible; + final int bottomPadding = mList.getPaddingBottom(); + final int maxSize; + final int currentVisibleSize; + if (mList.getClipToPadding()) { + maxSize = lastChild.getHeight(); + currentVisibleSize = mList.getHeight() - bottomPadding - lastChild.getTop(); + } else { + maxSize = lastChild.getHeight() + bottomPadding; + currentVisibleSize = mList.getHeight() - lastChild.getTop(); + } + if (currentVisibleSize > 0 && maxSize > 0) { + result += (1 - result) * ((float) currentVisibleSize / maxSize ); + } } return result; |