Android 文本视图可以';调用setText()和invalidate()后,无法在画布上正确绘制
我的目的是制作一个Android 文本视图可以';调用setText()和invalidate()后,无法在画布上正确绘制,android,bitmap,android-canvas,textview,android-view,Android,Bitmap,Android Canvas,Textview,Android View,我的目的是制作一个位图图像,显示用户提供的文本,然后图像可以保存到缓存中 调用TextView.setText()和TextView.invalidate()后,TextView没有按照我的预期进行更新。它仍然在画布上绘制以前的文本 @Override public void onClick(View v) { // tv is a TextView and et is an EditText. tv.setText(et.getText().toString()); t
位图
图像,显示用户提供的文本,然后图像可以保存到缓存中
调用TextView.setText()
和TextView.invalidate()
后,TextView
没有按照我的预期进行更新。它仍然在画布上绘制以前的文本
@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()
使整个观点无效。如果视图可见,
onDraw(android.graphics.Canvas)
将在
未来。这必须从UI线程调用。从非UI调用
线程,调用postInvalidate()
这是否意味着我应该重写onDraw()
方法?无效意味着这只是一种刷新。一旦你尝试使用gone并将其带到前台,它就会起作用。例如:
// Try this ...
tv.setVisibility(View.GONE);
tv.bringToFront();
tv.setVisibility(View.VISIBLE);
无效意味着它只是一种更新。一旦你尝试使用gone并将其带到前台,它就会起作用。例如:
// Try this ...
tv.setVisibility(View.GONE);
tv.bringToFront();
tv.setVisibility(View.VISIBLE);
我认为应该更新它,您甚至不需要调用invalidate()
。也许代码中的其他地方有问题。您的onClick
函数对我来说似乎是正确的。我认为它应该更新,您甚至不需要调用invalidate()
。也许代码中的其他地方有问题。您的onClick
功能对我来说似乎很正确。我找到了解决方案。。。(可能是一个解决方案)
在调用draw()之前需要添加此行:
我认为宽度和高度尚未更新,因为getWidth()返回以前的值。我找到了解决方案。。。(可能是一个解决方案)
在调用draw()之前需要添加此行:
我认为宽度和高度还没有更新,因为getWidth()返回以前的值