Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 画布上的SpannableString正在意外地移动-Android_Java_Android_Eclipse_Canvas - Fatal编程技术网

Java 画布上的SpannableString正在意外地移动-Android

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)

我正在尝试使用画布在自定义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中输入文本,然后将其转换为字符串(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()调用在哪里?As
canvas.restore()
没有任何可还原的内容,尽管它会引发错误,因此您可能会在错误的位置进行保存?。
canvas.save()画布的右前
canvas.translate(x,y)但没有成功。产出仍然是一样的。显而易见的问题是。
canvas.save()调用在哪里?As
canvas.restore()
没有任何可还原的内容,尽管它会引发错误,因此您可能会在错误的位置进行保存?。
canvas.save()画布的右前
canvas.translate(x,y)但没有成功。输出仍然是一样的。