diff options
| author | 2016-07-26 15:40:31 +0100 | |
|---|---|---|
| committer | 2016-07-26 17:07:28 +0100 | |
| commit | 8cc883de9ee40ca6943f64805bb0c063487514b6 (patch) | |
| tree | cf770a1209d00c70b4fd4f090d6393d9c8be1364 | |
| parent | 7c731f9e1f01550536c0bbd97cf696dec2cdcc95 (diff) | |
Use correct bounds for scroll bar rendering.
Bug:30001373
Change-Id: I20c77a2d97096bda451c3a871fd6be7ad699b047
| -rw-r--r-- | core/java/android/view/RoundScrollbarRenderer.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 35 |
2 files changed, 41 insertions, 6 deletions
diff --git a/core/java/android/view/RoundScrollbarRenderer.java b/core/java/android/view/RoundScrollbarRenderer.java index f258458a9b15..b77be8c00e69 100644 --- a/core/java/android/view/RoundScrollbarRenderer.java +++ b/core/java/android/view/RoundScrollbarRenderer.java @@ -20,6 +20,7 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; +import android.graphics.Rect; /** * Helper class for drawing round scroll bars on round Wear devices. @@ -53,7 +54,7 @@ class RoundScrollbarRenderer { mParent = parent; } - public void drawRoundScrollbars(Canvas canvas, float alpha) { + public void drawRoundScrollbars(Canvas canvas, float alpha, Rect bounds) { if (alpha == 0) { return; } @@ -83,10 +84,11 @@ class RoundScrollbarRenderer { // Draw the track and the scroll bar. mRect.set( - 0 + thumbWidth / 2, - 0 + thumbWidth / 2, - mParent.getWidth() - thumbWidth / 2, - mParent.getHeight() - thumbWidth / 2); + bounds.left - thumbWidth / 2, + bounds.top, + bounds.right - thumbWidth / 2, + bounds.bottom); + canvas.drawArc(mRect, -SCROLLBAR_ANGLE_RANGE / 2, SCROLLBAR_ANGLE_RANGE, false, mTrackPaint); canvas.drawArc(mRect, startAngle, sweepAngle, false, mThumbPaint); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 1fa182050c95..d93f8af2165d 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -14770,6 +14770,37 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private void getVerticalScrollBarBounds(Rect bounds) { + if (mRoundScrollbarRenderer == null) { + getStraightVerticalScrollBarBounds(bounds); + } else { + getRoundVerticalScrollBarBounds(bounds); + } + } + + private void getRoundVerticalScrollBarBounds(Rect bounds) { + final int inside = (mViewFlags & SCROLLBARS_OUTSIDE_MASK) == 0 ? ~0 : 0; + int verticalScrollbarPosition = mVerticalScrollbarPosition; + if (verticalScrollbarPosition == SCROLLBAR_POSITION_DEFAULT) { + verticalScrollbarPosition = isLayoutRtl() ? + SCROLLBAR_POSITION_LEFT : SCROLLBAR_POSITION_RIGHT; + } + final int width = mRight - mLeft; + final int height = mBottom - mTop; + switch (verticalScrollbarPosition) { + default: + case SCROLLBAR_POSITION_RIGHT: + bounds.left = mScrollX - (mUserPaddingRight & inside); + break; + case SCROLLBAR_POSITION_LEFT: + bounds.left = mScrollX + (mUserPaddingLeft & inside); + break; + } + bounds.top = mScrollY + (mPaddingTop & inside); + bounds.right = bounds.left + width; + bounds.bottom = mScrollY + height - (mUserPaddingBottom & inside); + } + + private void getStraightVerticalScrollBarBounds(Rect bounds) { final int inside = (mViewFlags & SCROLLBARS_OUTSIDE_MASK) == 0 ? ~0 : 0; final int size = getVerticalScrollbarWidth(); int verticalScrollbarPosition = mVerticalScrollbarPosition; @@ -14848,8 +14879,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // Fork out the scroll bar drawing for round wearable devices. if (mRoundScrollbarRenderer != null) { if (drawVerticalScrollBar) { + final Rect bounds = cache.mScrollBarBounds; + getVerticalScrollBarBounds(bounds); mRoundScrollbarRenderer.drawRoundScrollbars( - canvas, (float) cache.scrollBar.getAlpha() / 255f); + canvas, (float) cache.scrollBar.getAlpha() / 255f, bounds); if (invalidate) { invalidate(); } |