私の目的は、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スレッドから呼び出す必要があります。UI以外のスレッドから呼び出すには、を呼び出しますpostInvalidate()
。
onDraw()
メソッドをオーバーライドする必要があるということですか?