aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-prod (mdb) <android-build-team-robot@google.com>2020-02-11 12:28:03 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-02-11 12:28:03 +0000
commit1a9735666484898ca9e1ed383c1dc59b79596efb (patch)
treed05b5906238baf45233d34d95981c1e4e0816ce5
parentbb33a353f7a67e3fc742abce8fdc3eaa4326cbbe (diff)
parent783871640ed03a58d9c3a913b63338511d371fa4 (diff)
downloadsupport-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.java39
-rw-r--r--transition/transition/src/main/java/androidx/transition/GhostViewPort.java1
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);
}