我尝试使用画布在自定义ImageView上显示文本。 这是我的TextPaint:
mPaint = new TextPaint();
mPaint.setDither(true);
mPaint.setColor(0xFFFFFFFF);
mPaint.setTextAlign(Paint.Align.CENTER);
mPaint.setTypeface(tf);
mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
mPaint.setTextSize(mSize);
用户在EditText中输入文本,该文本将转换为String( sText ),然后转换为SpannableString( ssText )。 SpannableString正在画布上显示。 这是我的onDraw:
int x = this.getWidth() / 2, y = 10;
Editable.Factory fac = Editable.Factory.getInstance();
Editable edit = fac.newEditable(ssText);
DynamicLayout layout = new DynamicLayout(edit, mPaint, (x * 2), Alignment.ALIGN_NORMAL, 1, 0, false);
canvas.translate(x, y);
layout.draw(canvas);
canvas.restore();
现在,我在EditText中使用一些字符串( mText )作为输入(一行中的一个字符串),我必须在已经显示的SpannableString中更改颜色(<画布上的strong> ssText 。
for (String line : mText.split("\n")) { // one string one line
if (sText.matches(".*\\b" + line + "\\b.*")) {
int len = line.length();
// get the starting index of String line in sText
for (int i = -1; (i = sText.indexOf(mText, i + 1)) != -1;) {
// change the color of required text in ssText
ssText.setSpan(new ForegroundColorSpan(Color.rgb(r_deep, g_deep, b_deep)), i, (i + len), 0);
}
}
}
如上所述更改 ssText 的颜色后,再次单击ChangeColor按钮调用onDraw,在画布上显示它。但是,我在这里看到画布上 ssText 的位置是不规则的。
我在点击ChangeColor按钮之前看到了这个:
如果问题出现在画布的翻译中,我也会使用canvas.restore();
我不明白问题所在。请帮忙!