From f2a204e792df5593cfe54efc95d04b7e764795c1 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Fri, 12 Feb 2010 15:25:33 -0800 Subject: Added proper overscrolling scroll bar behavior to GridView --- core/java/android/widget/GridView.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'core/java/android/widget/GridView.java') diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index 30a38df954e2..b9acf5ec38b5 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -1856,8 +1856,11 @@ public class GridView extends AbsListView { final int top = view.getTop(); int height = view.getHeight(); if (height > 0) { - final int whichRow = mFirstPosition / mNumColumns; - return Math.max(whichRow * 100 - (top * 100) / height, 0); + final int numColumns = mNumColumns; + final int whichRow = mFirstPosition / numColumns; + final int rowCount = (mItemCount + numColumns - 1) / numColumns; + return Math.max(whichRow * 100 - (top * 100) / height + + (int) ((float) mScrollY / getHeight() * rowCount * 100), 0); } } return 0; @@ -1868,7 +1871,12 @@ public class GridView extends AbsListView { // TODO: Account for vertical spacing too final int numColumns = mNumColumns; final int rowCount = (mItemCount + numColumns - 1) / numColumns; - return Math.max(rowCount * 100, 0); + int result = Math.max(rowCount * 100, 0); + if (mScrollY != 0) { + // Compensate for overscroll + result += Math.abs((int) ((float) mScrollY / getHeight() * rowCount * 100)); + } + return result; } } -- cgit v1.2.3