我的目的是製作一個 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() 方法?

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐