diff options
author | Adam Powell <adamp@google.com> | 2010-03-11 15:01:56 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-03-11 15:01:56 -0800 |
commit | c1bcc9989cffa86780bdf1d797b080eea27e7194 (patch) | |
tree | 90e3919eeb287b0a4beba31ea36e76b2959bbefe | |
parent | 6be9c162d67b4298e846e105c54d127ea17cc840 (diff) | |
parent | 84222e04252720cf681032e865db526ce4a612a4 (diff) | |
download | frameworks_base-c1bcc9989cffa86780bdf1d797b080eea27e7194.zip frameworks_base-c1bcc9989cffa86780bdf1d797b080eea27e7194.tar.gz frameworks_base-c1bcc9989cffa86780bdf1d797b080eea27e7194.tar.bz2 |
Merge "Fix overscroll distance calculation for stack-from-bottom ListViews"
-rw-r--r-- | core/java/android/widget/AbsListView.java | 6 | ||||
-rw-r--r-- | core/java/android/widget/ListView.java | 31 |
2 files changed, 30 insertions, 7 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index a1c3fa2..ce236c0 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -381,12 +381,12 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te /** * Maximum distance to overscroll by */ - private int mOverscrollMax; + int mOverscrollMax; /** * Content height divided by this is the overscroll limit. */ - private static final int OVERSCROLL_LIMIT_DIVISOR = 3; + static final int OVERSCROLL_LIMIT_DIVISOR = 3; /** * Used to request a layout when we changed touch mode @@ -2390,7 +2390,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te awakenScrollBars(); } - private int getOverscrollMax() { + int getOverscrollMax() { final int childCount = getChildCount(); if (childCount > 0) { return Math.min(mOverscrollMax, diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java index 0594844..27700fd 100644 --- a/core/java/android/widget/ListView.java +++ b/core/java/android/widget/ListView.java @@ -1250,10 +1250,19 @@ public class ListView extends AbsListView { int findMotionRow(int y) { int childCount = getChildCount(); if (childCount > 0) { - for (int i = 0; i < childCount; i++) { - View v = getChildAt(i); - if (y <= v.getBottom()) { - return mFirstPosition + i; + if (!mStackFromBottom) { + for (int i = 0; i < childCount; i++) { + View v = getChildAt(i); + if (y <= v.getBottom()) { + return mFirstPosition + i; + } + } + } else { + for (int i = childCount - 1; i >= 0; i--) { + View v = getChildAt(i); + if (y >= v.getTop()) { + return mFirstPosition + i; + } } } } @@ -3682,6 +3691,20 @@ public class ListView extends AbsListView { mCheckedIdStates.clear(); } } + + @Override + int getOverscrollMax() { + if (mStackFromBottom) { + final int childCount = getChildCount(); + if (childCount > 0) { + return Math.min(mOverscrollMax, + (getHeight() - getChildAt(0).getTop()) / OVERSCROLL_LIMIT_DIVISOR); + } else { + return mOverscrollMax; + } + } + return super.getOverscrollMax(); + } static class SavedState extends BaseSavedState { SparseBooleanArray checkState; |