gpt4 book ai didi

android - 调用 setText() 和 invalidate() 后,TextView 无法在 Canvas 上正确绘制

转载 作者:行者123 更新时间:2023-11-30 04:08:02 26 4
gpt4 key购买 nike

我的目的是制作一个显示用户提供的文本的位图图像,该图像稍后可以保存到缓存中。

在调用 TextView.setText()TextView.invalidate() 之后,TextView 没有像我预期的那样更新。它仍然在 Canvas 上绘制以前的文本。

@Override
public void onClick(View v) {
// tv is a TextView and et is an EditText.
tv.setText(et.getText().toString());
tv.invalidate();
// if measure() isn't called, getMeasuredWidth() returns previous value.tv.measure(0, 0);

int screenWidth = (int) tv.getMeasuredWidth();
int screenHeight = (int) tv.getMeasuredHeight();

if (screenHeight * screenWidth != 0) {
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
screenWidth, screenHeight);
Bitmap testB;

testB = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(testB);

tv.draw(c);
// tv draws previous String on Canvas c.

iv = (ImageView) findViewById(R.id.image);
iv.setLayoutParams(layoutParams);
iv.setBackgroundColor(Color.RED);
iv.setImageBitmap(testB);
}
}

文件说

public void invalidate ()

Invalidate the whole view. If the view is visible, onDraw(android.graphics.Canvas) will be called at some point in the future. This must be called from a UI thread. To call from a non-UI thread, call postInvalidate().

这是否意味着我应该覆盖 onDraw() 方法?

最佳答案

我找到了解决方案...(可能是一个解决方案)

在调用draw()之前需要添加这一行:

tv.layout(0, 0, screenWidth, screenHeight);

我认为宽度和高度还没有更新,因为 getWidth() 返回以前的值。

关于android - 调用 setText() 和 invalidate() 后,TextView 无法在 Canvas 上正确绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com