Skip to content

Commit 7d6f6c9

Browse files
author
Fabrice Di Meglio
committed
Make TextView Marquee RTL-aware
- fix bug #6870530 Change-Id: Icd8aae19136cfd49ee475d26749978463e7f7f77
1 parent 85d28a0 commit 7d6f6c9

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

core/java/android/widget/TextView.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)