diff options
author | android-build-prod (mdb) <android-build-team-robot@google.com> | 2020-02-11 12:28:03 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-02-11 12:28:03 +0000 |
commit | 1a9735666484898ca9e1ed383c1dc59b79596efb (patch) | |
tree | d05b5906238baf45233d34d95981c1e4e0816ce5 | |
parent | bb33a353f7a67e3fc742abce8fdc3eaa4326cbbe (diff) | |
parent | 783871640ed03a58d9c3a913b63338511d371fa4 (diff) | |
download | support-snap-temp-L10000000674277664.tar.gz |
Merge "Merge cherrypicks of [1232552] into androidx-transition-release" into androidx-transition-releasesnap-temp-L16800000674721660snap-temp-L13100000731029261snap-temp-L10000000674277664
-rw-r--r-- | transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java | 39 | ||||
-rw-r--r-- | transition/transition/src/main/java/androidx/transition/GhostViewPort.java | 1 |
2 files changed, 40 insertions, 0 deletions
diff --git a/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java b/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java index 2f7f2876a5e..cbe3564fadd 100644 --- a/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java +++ b/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java @@ -260,6 +260,45 @@ public class GhostViewTest extends BaseTest { assertNotEquals(Color.WHITE, color); // we have a shadow if the pixel is not white } + @Test + public void testGhostViewIsNotClippingChildren() throws Throwable { + // Sometimes we apply an animation matrix for a view added into GhostView. + // This means the view will not be drawn inside their nominal bounds - + // [mLeft, mTop, mRight, mBottom]. If GhostViewPort has clipChildren() == true + // then because of Canvas.quickReject(mLeft, mTop, mRight, mBottom) returning true + // the drawing of such child would be skipped, even if in fact this child is + // visible due to the animation matrix transformation. + final FrameLayout parent1 = new FrameLayout(mContext); + final View view = makeColorView(Color.RED); + final FrameLayout parent2 = createParent2(); + rule.runOnUiThread(new Runnable() { + @Override + public void run() { + parent1.addView(view); + mRoot.addView(parent1); + mRoot.addView(parent2); + } + }); + + waitForDraw(view); + rule.runOnUiThread(new Runnable() { + @Override + public void run() { + float offsetLargerThanSize = SIZE * 2; + Matrix matrix = new Matrix(); + matrix.postTranslate(0f, offsetLargerThanSize); + Matrix invertedMatrix = new Matrix(); + invertedMatrix.postTranslate(0f, -offsetLargerThanSize); + GhostViewUtils.addGhost(view, parent2, matrix); + ViewUtils.setAnimationMatrix(view, invertedMatrix); + } + }); + + waitForDraw(parent2); + assertColor(Color.RED, drawBitmap(parent2)); + } + + private View makeColorView(int color) { View view = new View(mContext); ViewCompat.setBackground(view, new ColorDrawable(color)); diff --git a/transition/transition/src/main/java/androidx/transition/GhostViewPort.java b/transition/transition/src/main/java/androidx/transition/GhostViewPort.java index 38b9289c668..5c38450002a 100644 --- a/transition/transition/src/main/java/androidx/transition/GhostViewPort.java +++ b/transition/transition/src/main/java/androidx/transition/GhostViewPort.java @@ -68,6 +68,7 @@ class GhostViewPort extends ViewGroup implements GhostView { super(view.getContext()); mView = view; setWillNotDraw(false); + setClipChildren(false); setLayerType(LAYER_TYPE_HARDWARE, null); } |