Fix some drawing artifacts/bugs around overlays/text anchors
Change-Id: I28170d4e120506c09a1cfea721244fbcd3c2576a
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index fd6769c..deba70c 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -3542,10 +3542,10 @@
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
if (child.isOverlayEnabled()) {
- canvas.translate(child.mLeft + child.mScrollX, child.mTop + child.mScrollY);
+ canvas.translate(child.mLeft - child.mScrollX, child.mTop - child.mScrollY);
child.onDrawOverlay(canvas);
- canvas.translate(-(child.mLeft + child.mScrollX),
- -(child.mTop + child.mScrollY));
+ canvas.translate(-(child.mLeft - child.mScrollX),
+ -(child.mTop - child.mScrollY));
}
}
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index a14d004..a09b0c8 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -7727,8 +7727,9 @@
bounds.bottom = bounds.top + drawableHeight;
convertFromViewportToContentCoordinates(bounds);
+ invalidate();
mDrawable.setBounds(bounds);
- postInvalidate();
+ invalidate();
}
boolean hasFingerOn(float x, float y) {
@@ -7745,9 +7746,16 @@
return Rect.intersects(mDrawable.getBounds(), fingerRect);
}
+ void invalidate() {
+ final Rect bounds = mDrawable.getBounds();
+ TextView.this.invalidate(bounds.left, bounds.top,
+ bounds.right, bounds.bottom);
+ }
+
void postInvalidate() {
final Rect bounds = mDrawable.getBounds();
- TextView.this.postInvalidate(bounds.left, bounds.top, bounds.right, bounds.bottom);
+ TextView.this.postInvalidate(bounds.left, bounds.top,
+ bounds.right, bounds.bottom);
}
void postInvalidateDelayed(long delay) {