summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/widget/FastScroller.java17
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;