diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 258359e982648..2307a039bfa5c 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -15012,8 +15012,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * @return true if this view and all ancestors are visible as of the last * {@link #onVisibilityAggregated(boolean)} call. + * + * @hide */ - boolean isAggregatedVisible() { + public boolean isAggregatedVisible() { return (mPrivateFlags3 & PFLAG3_AGGREGATED_VISIBLE) != 0; } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 014340197393c..67a271558f836 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -10636,8 +10636,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return; } - if ((mMarquee == null || mMarquee.isStopped()) && (isFocused() || isSelected()) - && getLineCount() == 1 && canMarquee()) { + if ((mMarquee == null || mMarquee.isStopped()) && isAggregatedVisible() + && (isFocused() || isSelected()) && getLineCount() == 1 && canMarquee()) { if (mMarqueeFadeMode == MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS) { mMarqueeFadeMode = MARQUEE_FADE_SWITCH_SHOW_FADE; @@ -11096,6 +11096,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } + @Override + public void onVisibilityAggregated(boolean isVisible) { + super.onVisibilityAggregated(isVisible); + startStopMarquee(isVisible); + } + /** * Use {@link BaseInputConnection#removeComposingSpans * BaseInputConnection.removeComposingSpans()} to remove any IME composing @@ -13749,7 +13755,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mChoreographer.removeFrameCallback(mTickCallback); final TextView textView = mView.get(); - if (textView != null && (textView.isFocused() || textView.isSelected())) { + if (textView != null && textView.isAggregatedVisible() + && (textView.isFocused() || textView.isSelected())) { long currentMs = mChoreographer.getFrameTime(); long deltaMs = currentMs - mLastAnimationMs; mLastAnimationMs = currentMs;