画布上的SpannableString意外地转移 - Android

时间:2016-02-07 08:16:35

标签: 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.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按钮之前看到了这个:enter image description here

这是在点击ChangeColor按钮后:enter image description here

如果问题出现在画布的翻译中,我也会使用canvas.restore();

我不明白问题所在。请帮忙!

0 个答案:

没有答案