diff options
| author | 2011-01-17 14:42:41 -0800 | |
|---|---|---|
| committer | 2011-01-17 14:42:41 -0800 | |
| commit | d6cd572df8067c40b3e0e7e74e58cdb456b33e92 (patch) | |
| tree | bb0ed888ea6af5780ad0b92c397297ebf4a579b8 | |
| parent | 73fddbae964ee41895c8218454d0ed7fd71d6913 (diff) | |
Improve hardware layers rendering speed when setting a View's alpha.
Change-Id: Ib1275677f531c60d9919978c5538c663fdb823b5
| -rw-r--r-- | core/java/android/view/View.java | 17 | ||||
| -rw-r--r-- | core/java/android/view/ViewGroup.java | 13 | ||||
| -rw-r--r-- | tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java | 2 |
3 files changed, 21 insertions, 11 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index f05ef8c588cd..53fc0c0ff112 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -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) { @@ -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(); } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index f6b6778ea555..d1781cc0d96c 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -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; @@ -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); @@ -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)); @@ -2476,9 +2475,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } else { cachePaint = child.mLayerPaint; - if (alpha < 1.0f) { - cachePaint.setAlpha((int) (alpha * 255)); - } + cachePaint.setAlpha((int) (alpha * 255)); } canvas.drawBitmap(cache, 0.0f, 0.0f, cachePaint); } diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java index a0b1d782d723..e795f02a224d 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java @@ -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) { |