diff options
| author | Chet Haase <chet@google.com> | 2012-03-21 18:54:18 -0700 |
|---|---|---|
| committer | Chet Haase <chet@google.com> | 2012-04-03 14:02:17 -0700 |
| commit | db8c9a6a4d9bf8c39f834b25611926caf21380f6 (patch) | |
| tree | 5a1ef2e49ea05c5a28477fcf8525ca66e8e31890 /core/java/android/widget/TextView.java | |
| parent | b3fa3960a03ef553e58bf1add88029a6c072c6b6 (diff) | |
| download | frameworks_base-db8c9a6a4d9bf8c39f834b25611926caf21380f6.zip frameworks_base-db8c9a6a4d9bf8c39f834b25611926caf21380f6.tar.gz frameworks_base-db8c9a6a4d9bf8c39f834b25611926caf21380f6.tar.bz2 | |
Optimization of alpha with DisplayList properties
Some views (such as ImageView and TextView) handle non-opaque alpha
values directly. This was originally an optimization, but we can handle it faster
in many cases without this optimization when DisplayList properties are enabled.
Basically, if a view has non-overlapping rendering, we set the alpha value directly
on the renderer (the equivalent of setting it on the Paint object) and draw each
primitive with that alpha value. Doing it this way avoids re-creating DisplayLists
while getting the same speedup that onSetAlpha() used to get pre-DisplayList properties.
Change-Id: I0f7827f075d3b35093a882d4adbb300a1063c288
Diffstat (limited to 'core/java/android/widget/TextView.java')
| -rw-r--r-- | core/java/android/widget/TextView.java | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 2a81f08..d2a1755 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -4268,7 +4268,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener protected boolean onSetAlpha(int alpha) { // Alpha is supported if and only if the drawing can be done in one pass. // TODO text with spans with a background color currently do not respect this alpha. - if (getBackground() == null) { + if (!USE_DISPLAY_LIST_PROPERTIES && + (getBackground() != null || mText instanceof Spannable || hasSelection())) { if (mCurrentAlpha != alpha) { mCurrentAlpha = alpha; final Drawables dr = mDrawables; @@ -4292,6 +4293,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return false; } + @Override + public boolean hasOverlappingRendering() { + if (!USE_DISPLAY_LIST_PROPERTIES) { + return super.hasOverlappingRendering(); + } else { + return (getBackground() != null || mText instanceof Spannable || hasSelection()); + } + } + /** * When a TextView is used to display a useful piece of information to the user (such as a * contact's address), it should be made selectable, so that the user can select and copy this |
