summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt18
1 files changed, 15 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt b/packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt
index eeca1e38abb0..e5b126d7ff7f 100644
--- a/packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/animation/TransitionLayout.kt
@@ -17,6 +17,7 @@
package com.android.systemui.util.animation
import android.content.Context
+import android.graphics.Canvas
import android.graphics.PointF
import android.graphics.Rect
import android.util.AttributeSet
@@ -37,6 +38,7 @@ class TransitionLayout @JvmOverloads constructor(
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
+ private val boundsRect = Rect()
private val originalGoneChildrenSet: MutableSet<Int> = mutableSetOf()
private val originalViewAlphas: MutableMap<Int, Float> = mutableMapOf()
private var measureAsConstraint: Boolean = false
@@ -147,16 +149,26 @@ class TransitionLayout @JvmOverloads constructor(
}
}
+ override fun dispatchDraw(canvas: Canvas?) {
+ val clip = !boundsRect.isEmpty
+ if (clip) {
+ canvas?.save()
+ canvas?.clipRect(boundsRect)
+ }
+ super.dispatchDraw(canvas)
+ if (clip) {
+ canvas?.restore()
+ }
+ }
+
private fun updateBounds() {
val layoutLeft = left
val layoutTop = top
setLeftTopRightBottom(layoutLeft, layoutTop, layoutLeft + currentState.width,
layoutTop + currentState.height)
- val bounds = clipBounds ?: Rect()
- bounds.set(left, top, right, bottom)
- clipBounds = bounds
translationX = currentState.translation.x
translationY = currentState.translation.y
+ boundsRect.set(0, 0, (width + translationX).toInt(), (height + translationY).toInt())
}
/**