Java 画布上的SpannableString正在意外地移动-Android
我正在尝试使用画布在自定义ImageView上显示文本。 这是我的TextPaint:Java 画布上的SpannableString正在意外地移动-Android,java,android,eclipse,canvas,Java,Android,Eclipse,Canvas,我正在尝试使用画布在自定义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 = 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中输入文本,然后将其转换为字符串(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(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按钮之前看到:
这是在单击ChangeColor按钮之后:
如果问题出在画布的翻译上,我也在使用canvas.restore()
我不明白问题出在哪里。请帮忙 显而易见的问题是。
canvas.save()调用在哪里?Ascanvas.restore()
没有任何可还原的内容,尽管它会引发错误,因此您可能会在错误的位置进行保存?。canvas.save()代码>画布的右前canvas.translate(x,y)代码>但没有成功。产出仍然是一样的。显而易见的问题是。canvas.save()调用在哪里?Ascanvas.restore()
没有任何可还原的内容,尽管它会引发错误,因此您可能会在错误的位置进行保存?。canvas.save()代码>画布的右前canvas.translate(x,y)代码>但没有成功。输出仍然是一样的。