diff options
| author | 2019-04-08 15:27:12 +0000 | |
|---|---|---|
| committer | 2019-04-08 15:27:12 +0000 | |
| commit | 658312b51cb7b8beb649a07b85a7ba4f37d40151 (patch) | |
| tree | feffd918b7761373734869b1587c84e3c7aeabc2 | |
| parent | e9d146ec9acd932f906d68cf836bb162bde7f7ab (diff) | |
| parent | d568294c1a587fd712b41f072d6e1a521fe09a72 (diff) | |
Merge "Sharesheet - Fix scroll behavior moving past bounds" into qt-dev
| -rw-r--r-- | core/java/com/android/internal/widget/ResolverDrawerLayout.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java index 329c6b395bba..66bbe22c9969 100644 --- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java +++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java @@ -73,6 +73,11 @@ public class ResolverDrawerLayout extends ViewGroup { */ private float mCollapseOffset; + /** + * Track fractions of pixels from drag calculations. Without this, the view offsets get + * out of sync due to frequently dropping fractions of a pixel from '(int) dy' casts. + */ + private float mDragRemainder = 0.0f; private int mCollapsibleHeight; private int mUncollapsibleHeight; private int mAlwaysShowHeight; @@ -485,6 +490,16 @@ public class ResolverDrawerLayout extends ViewGroup { mCollapsibleHeight + mUncollapsibleHeight)); if (newPos != mCollapseOffset) { dy = newPos - mCollapseOffset; + + mDragRemainder += dy - (int) dy; + if (mDragRemainder >= 1.0f) { + mDragRemainder -= 1.0f; + dy += 1.0f; + } else if (mDragRemainder <= -1.0f) { + mDragRemainder += 1.0f; + dy -= 1.0f; + } + final int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { final View child = getChildAt(i); |