From f396f011eefb79e1728747dcc1df9c42278a8d44 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Tue, 9 Jun 2015 10:43:03 -0700 Subject: [PATCH] Dont ignore layer paint alpha in software path bug:19412691 Change-Id: Ie56b2cbc667a078eb4a7c5bfe7b8e8dd6b0fc24b --- core/java/android/view/View.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 342315bde55ec..2e6044e4f9f3a 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -16064,23 +16064,23 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } else if (cache != null) { mPrivateFlags &= ~PFLAG_DIRTY_MASK; - Paint cachePaint; - int restoreAlpha = 0; - if (layerType == LAYER_TYPE_NONE) { - cachePaint = parent.mCachePaint; + // no layer paint, use temporary paint to draw bitmap + Paint cachePaint = parent.mCachePaint; if (cachePaint == null) { cachePaint = new Paint(); cachePaint.setDither(false); parent.mCachePaint = cachePaint; } + cachePaint.setAlpha((int) (alpha * 255)); + canvas.drawBitmap(cache, 0.0f, 0.0f, cachePaint); } else { - cachePaint = mLayerPaint; - restoreAlpha = mLayerPaint.getAlpha(); + // use layer paint to draw the bitmap, merging the two alphas, but also restore + int layerPaintAlpha = mLayerPaint.getAlpha(); + mLayerPaint.setAlpha((int) (alpha * layerPaintAlpha)); + canvas.drawBitmap(cache, 0.0f, 0.0f, mLayerPaint); + mLayerPaint.setAlpha(layerPaintAlpha); } - cachePaint.setAlpha((int) (alpha * 255)); - canvas.drawBitmap(cache, 0.0f, 0.0f, cachePaint); - cachePaint.setAlpha(restoreAlpha); } if (restoreTo >= 0) {