Android 如何编辑Canvas.drawText()绘制的文本?

Android 如何编辑Canvas.drawText()绘制的文本?,android,android-canvas,Android,Android Canvas,我制作了一个Android应用程序,用户可以在其中写入位图。有一个EditText,用户在其中键入文本,TextWatcher监视此文本。文本使用Canvas.drawText()写入位图。当在EditText中键入文本时,此功能正常工作 但是,当我尝试退格一些已写入的文本并写入一些其他文本时,位图上的文本不会被删除。相反,新文本只是覆盖在“已删除”文本上 有什么方法可以解决这个问题吗?您可以存储Canvas.drawText显示的文本并显示它,如果您想更改它,只需使用setter设置新文本,然

我制作了一个Android应用程序,用户可以在其中写入位图。有一个EditText,用户在其中键入文本,TextWatcher监视此文本。文本使用
Canvas.drawText()
写入位图。当在EditText中键入文本时,此功能正常工作

但是,当我尝试退格一些已写入的文本并写入一些其他文本时,位图上的文本不会被删除。相反,新文本只是覆盖在“已删除”文本上


有什么方法可以解决这个问题吗?

您可以存储Canvas.drawText显示的文本并显示它,如果您想更改它,只需使用setter设置新文本,然后使用以下方法更新画布:

设置新文本:

public void setText(String newText) {
    this.currentText = newText;
}
更新画布:

public void update() {
    this.invalidate();
}

只需将这两种方法都放入视图类。

当然,您可以重新绘制位图,然后重新绘制新文本


但一种更简单的方法(假设你有一个统一的背景)是首先使用背景色在相同的位置绘制当前文本(因此请删除所有内容),然后绘制新文本。

在用户完成编辑之前,你能不能不在位图上绘制?@DeeV我可以将此作为最后的手段,但我想知道还有没有别的办法。我的想法是提供一种在输入图片时用文本更新图片的方法。它在位图上绘制并粘贴在那里。覆盖上一个文本的唯一方法是重新绘制edittext所在的整个框。如果很简单,只需调用
#invalidate(int,int,int,int)其中参数为框。如果它很复杂,比如照片,你可能需要重新绘制整个位图,这就是我建议等待的原因。@DeeV是的,我认为这可能是最好的方法。谢谢你!谢谢,但是我的位图是照片,所以没有统一的背景。然后你需要重新绘制位图:(如果画布在视图上绘制了多个文本,那么所有文本都重新绘制了吗?