我的目的是製作一個 Bitmap 圖像顯示用戶提供的文本,然後圖像可以保存到緩存中。
調用 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 ()
使整個視圖無效。如果視圖可見,將在將來的某個位置調用 onDraw(android.graphics.Canvas) 。 這必須從用戶界麵線程調用。 要從非ui線程調用,請調用 postInvalidate() 。
這是否意味著我應該重寫 onDraw() 方法?