Loading core/java/android/view/View.java +14 −3 Original line number Diff line number Diff line Loading @@ -7905,7 +7905,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility + "LAYER_TYPE_SOFTWARE or LAYER_TYPE_HARDWARE"); } if (layerType == mLayerType) return; if (layerType == mLayerType) { if (layerType != LAYER_TYPE_NONE && paint != mLayerPaint) { mLayerPaint = paint == null ? new Paint() : paint; if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).invalidate(); } invalidate(); } return; } // Destroy any previous software drawing cache if needed switch (mLayerType) { Loading @@ -7931,9 +7940,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } mLayerType = layerType; mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : paint; mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : (paint == null ? new Paint() : paint); // TODO: Make sure we invalidate the parent's display list if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).invalidate(); } invalidate(); } Loading core/java/android/view/ViewGroup.java +5 −8 Original line number Diff line number Diff line Loading @@ -2398,16 +2398,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager layerType != LAYER_TYPE_NONE) { layerFlags |= Canvas.CLIP_TO_LAYER_SAVE_FLAG; } if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) { if (layerType != LAYER_TYPE_NONE) { child.mLayerPaint.setAlpha(multipliedAlpha); } else { canvas.saveLayerAlpha(sx, sy, sx + cr - cl, sy + cb - ct, multipliedAlpha, layerFlags); layerSaved = true; } } else { // Alpha is handled by the child directly, clobber the layer's alpha if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) { if (layerType != LAYER_TYPE_NONE) { child.mLayerPaint.setAlpha(255); } child.mPrivateFlags |= ALPHA_SET; Loading @@ -2433,7 +2432,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (hasNoCache) { boolean layerRendered = false; if (!layerSaved && layerType == LAYER_TYPE_HARDWARE) { if (layerType == LAYER_TYPE_HARDWARE) { final HardwareLayer layer = child.getHardwareLayer(canvas); if (layer != null && layer.isValid()) { ((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, child.mLayerPaint); Loading Loading @@ -2465,7 +2464,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager child.mPrivateFlags &= ~DIRTY_MASK; Paint cachePaint; if (layerType == LAYER_TYPE_NONE || child.mLayerPaint == null) { if (layerType == LAYER_TYPE_NONE) { cachePaint = mCachePaint; if (alpha < 1.0f) { cachePaint.setAlpha((int) (alpha * 255)); Loading @@ -2476,10 +2475,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } else { cachePaint = child.mLayerPaint; if (alpha < 1.0f) { cachePaint.setAlpha((int) (alpha * 255)); } } canvas.drawBitmap(cache, 0.0f, 0.0f, cachePaint); } Loading tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ public class ViewLayersActivity2 extends Activity { setupList(R.id.list1); setupList(R.id.list2); setupList(R.id.list3); findViewById(R.id.list1).setAlpha(0.7f); } private void setupList(int listId) { Loading Loading
core/java/android/view/View.java +14 −3 Original line number Diff line number Diff line Loading @@ -7905,7 +7905,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility + "LAYER_TYPE_SOFTWARE or LAYER_TYPE_HARDWARE"); } if (layerType == mLayerType) return; if (layerType == mLayerType) { if (layerType != LAYER_TYPE_NONE && paint != mLayerPaint) { mLayerPaint = paint == null ? new Paint() : paint; if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).invalidate(); } invalidate(); } return; } // Destroy any previous software drawing cache if needed switch (mLayerType) { Loading @@ -7931,9 +7940,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } mLayerType = layerType; mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : paint; mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : (paint == null ? new Paint() : paint); // TODO: Make sure we invalidate the parent's display list if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).invalidate(); } invalidate(); } Loading
core/java/android/view/ViewGroup.java +5 −8 Original line number Diff line number Diff line Loading @@ -2398,16 +2398,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager layerType != LAYER_TYPE_NONE) { layerFlags |= Canvas.CLIP_TO_LAYER_SAVE_FLAG; } if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) { if (layerType != LAYER_TYPE_NONE) { child.mLayerPaint.setAlpha(multipliedAlpha); } else { canvas.saveLayerAlpha(sx, sy, sx + cr - cl, sy + cb - ct, multipliedAlpha, layerFlags); layerSaved = true; } } else { // Alpha is handled by the child directly, clobber the layer's alpha if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) { if (layerType != LAYER_TYPE_NONE) { child.mLayerPaint.setAlpha(255); } child.mPrivateFlags |= ALPHA_SET; Loading @@ -2433,7 +2432,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (hasNoCache) { boolean layerRendered = false; if (!layerSaved && layerType == LAYER_TYPE_HARDWARE) { if (layerType == LAYER_TYPE_HARDWARE) { final HardwareLayer layer = child.getHardwareLayer(canvas); if (layer != null && layer.isValid()) { ((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, child.mLayerPaint); Loading Loading @@ -2465,7 +2464,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager child.mPrivateFlags &= ~DIRTY_MASK; Paint cachePaint; if (layerType == LAYER_TYPE_NONE || child.mLayerPaint == null) { if (layerType == LAYER_TYPE_NONE) { cachePaint = mCachePaint; if (alpha < 1.0f) { cachePaint.setAlpha((int) (alpha * 255)); Loading @@ -2476,10 +2475,8 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } else { cachePaint = child.mLayerPaint; if (alpha < 1.0f) { cachePaint.setAlpha((int) (alpha * 255)); } } canvas.drawBitmap(cache, 0.0f, 0.0f, cachePaint); } Loading
tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ public class ViewLayersActivity2 extends Activity { setupList(R.id.list1); setupList(R.id.list2); setupList(R.id.list3); findViewById(R.id.list1).setAlpha(0.7f); } private void setupList(int listId) { Loading