@@ -4837,18 +4837,23 @@ protected void onDraw(Canvas canvas) {
48374837 }
48384838 canvas .translate (compoundPaddingLeft , extendedPaddingTop + voffsetText );
48394839
4840+ final boolean isLayoutRtl = isLayoutRtl ();
4841+
48404842 final int layoutDirection = getResolvedLayoutDirection ();
48414843 final int absoluteGravity = Gravity .getAbsoluteGravity (mGravity , layoutDirection );
48424844 if (mEllipsize == TextUtils .TruncateAt .MARQUEE &&
48434845 mMarqueeFadeMode != MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS ) {
48444846 if (!mSingleLine && getLineCount () == 1 && canMarquee () &&
48454847 (absoluteGravity & Gravity .HORIZONTAL_GRAVITY_MASK ) != Gravity .LEFT ) {
4846- canvas .translate (mLayout .getLineRight (0 ) - (mRight - mLeft -
4847- getCompoundPaddingLeft () - getCompoundPaddingRight ()), 0.0f );
4848+ final int width = mRight - mLeft ;
4849+ final int padding = getCompoundPaddingLeft () + getCompoundPaddingRight ();
4850+ final float dx = mLayout .getLineRight (0 ) - (width - padding );
4851+ canvas .translate (isLayoutRtl ? -dx : +dx , 0.0f );
48484852 }
48494853
48504854 if (mMarquee != null && mMarquee .isRunning ()) {
4851- canvas .translate (-mMarquee .mScroll , 0.0f );
4855+ final float dx = -mMarquee .getScroll ();
4856+ canvas .translate (isLayoutRtl ? -dx : +dx , 0.0f );
48524857 }
48534858 }
48544859
@@ -4862,7 +4867,8 @@ protected void onDraw(Canvas canvas) {
48624867 }
48634868
48644869 if (mMarquee != null && mMarquee .shouldDrawGhost ()) {
4865- canvas .translate ((int ) mMarquee .getGhostOffset (), 0.0f );
4870+ final int dx = (int ) mMarquee .getGhostOffset ();
4871+ canvas .translate (isLayoutRtl ? -dx : dx , 0.0f );
48664872 layout .draw (canvas , highlight , mHighlightPaint , cursorOffsetVertical );
48674873 }
48684874
@@ -7455,7 +7461,8 @@ protected float getLeftFadingEdgeStrength() {
74557461 if (mMarquee != null && !mMarquee .isStopped ()) {
74567462 final Marquee marquee = mMarquee ;
74577463 if (marquee .shouldDrawLeftFade ()) {
7458- return marquee .mScroll / getHorizontalFadingEdgeLength ();
7464+ final float scroll = marquee .getScroll ();
7465+ return scroll / getHorizontalFadingEdgeLength ();
74597466 } else {
74607467 return 0.0f ;
74617468 }
@@ -7483,7 +7490,9 @@ protected float getRightFadingEdgeStrength() {
74837490 mMarqueeFadeMode != MARQUEE_FADE_SWITCH_SHOW_ELLIPSIS ) {
74847491 if (mMarquee != null && !mMarquee .isStopped ()) {
74857492 final Marquee marquee = mMarquee ;
7486- return (marquee .mMaxFadeScroll - marquee .mScroll ) / getHorizontalFadingEdgeLength ();
7493+ final float maxFadeScroll = marquee .getMaxFadeScroll ();
7494+ final float scroll = marquee .getScroll ();
7495+ return (maxFadeScroll - scroll ) / getHorizontalFadingEdgeLength ();
74877496 } else if (getLineCount () == 1 ) {
74887497 final int layoutDirection = getResolvedLayoutDirection ();
74897498 final int absoluteGravity = Gravity .getAbsoluteGravity (mGravity , layoutDirection );
@@ -8577,13 +8586,13 @@ private static final class Marquee extends Handler {
85778586 private byte mStatus = MARQUEE_STOPPED ;
85788587 private final float mScrollUnit ;
85798588 private float mMaxScroll ;
8580- float mMaxFadeScroll ;
8589+ private float mMaxFadeScroll ;
85818590 private float mGhostStart ;
85828591 private float mGhostOffset ;
85838592 private float mFadeStop ;
85848593 private int mRepeatLimit ;
85858594
8586- float mScroll ;
8595+ private float mScroll ;
85878596
85888597 Marquee (TextView v ) {
85898598 final float density = v .getContext ().getResources ().getDisplayMetrics ().density ;
@@ -8675,6 +8684,14 @@ float getGhostOffset() {
86758684 return mGhostOffset ;
86768685 }
86778686
8687+ float getScroll () {
8688+ return mScroll ;
8689+ }
8690+
8691+ float getMaxFadeScroll () {
8692+ return mMaxFadeScroll ;
8693+ }
8694+
86788695 boolean shouldDrawLeftFade () {
86798696 return mScroll <= mFadeStop ;
86808697 }
0 commit comments