适配居中显示文字的渐隐文字颜色

This commit is contained in:
chenjuntao
2020-06-24 10:29:24 +08:00
parent 9badcdc382
commit 6540af8386

View File

@ -180,14 +180,14 @@ public class ExpandTextView extends AppCompatTextView {
SpannableStringBuilder msp = new SpannableStringBuilder(mSnapshotText);
int length = msp.length();
int startPosition;
startPosition = content.length() - finalEndText.length() - mExpandText.length();
startPosition = Math.max(startPosition, 0);
int expandTextStartPosition;
expandTextStartPosition = content.length() - finalEndText.length() - mExpandText.length();
expandTextStartPosition = Math.max(expandTextStartPosition, 0);
// 避免越界
if (startPosition >= length) return;
if (expandTextStartPosition >= length) return;
msp.replace(startPosition, length, finalEndText + mExpandText);
msp.replace(expandTextStartPosition, length, finalEndText + mExpandText);
msp.setSpan(new ClickableSpan() {
@Override
@ -211,24 +211,29 @@ public class ExpandTextView extends AppCompatTextView {
mExpandCallback.onExpand();
}
}
}, startPosition + mEndText.length(), msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}, expandTextStartPosition + mEndText.length(), msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
int paintColor = 0;
// 找到最后一个 ForegroundSpan 并获取颜色给 GradientAlphaTextSpan
Object[] objects = msp.getSpans(0, startPosition, Object.class);
// 找到第一个位置与 endTextStartPosition 贴合的 ForegroundSpan / ClickableSpan ,
// 获取颜色赋值给 GradientAlphaTextSpan
Object[] objects = msp.getSpans(0, expandTextStartPosition, Object.class);
if (objects.length != 0) {
Object span = objects[objects.length - 1];
int endPosition = msp.getSpanEnd(span);
if (endPosition == startPosition) {
if (span instanceof ForegroundColorSpan) {
paintColor = ((ForegroundColorSpan) span).getForegroundColor();
} else if (span instanceof ClickableSpan) {
paintColor = getResources().getColor(R.color.theme_font);
for (Object span : objects) {
int startPosition = msp.getSpanStart(span);
int endPosition = msp.getSpanEnd(span);
if (expandTextStartPosition >= startPosition && expandTextStartPosition <= endPosition) {
if (span instanceof ForegroundColorSpan) {
paintColor = ((ForegroundColorSpan) span).getForegroundColor();
break;
} else if (span instanceof ClickableSpan) {
paintColor = getResources().getColor(R.color.theme_font);
break;
}
}
}
}
msp.setSpan(new GradientAlphaTextSpan(paintColor), startPosition, startPosition + finalEndText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
msp.setSpan(new GradientAlphaTextSpan(paintColor), expandTextStartPosition, expandTextStartPosition + finalEndText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(msp);
setMovementMethod(CustomLinkMovementMethod.getInstance());