根据“将TextView截图成位图”主题,找到了很多帖子。然而,我的问题与之不同,首先在显示器上绘制视图(所有布局和测量工作已完成),然后将其绘制到连接到位图的画布中。我只想从头开始创建一个TextView,而不必显示在屏幕上,最后将其渲染到位图中。这是基本配置,已经可以正常工作。点击TextView将其绘制到位图中,并将其设置为ImageView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:background="#fff">
<TextView android:id="@+id/tv" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="The Quick Brown Fox Jumps Over The Lazy Dog."
android:textSize="20dip" android:background="#abcdef"
android:textColor="#000" android:padding="10dip"
android:layout_margin="10dip" />
<ImageView android:id="@+id/iv" android:layout_width="449px"
android:layout_height="47px" android:background="#56789a"
android:layout_margin="10dip" />
</LinearLayout>
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.tv).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bmp = Bitmap.createBitmap(449, 47, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
v.draw(canvas);
ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(bmp);
}
});
}
现在来到了问题所在。我将在Java中创建一个TextView,希望它能直接绘制到Bitmap中。之后我会将其设置到ImageView中。但是我从未成功过 :(
Bitmap bmp = Bitmap.createBitmap(449, 47, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
TextView tv = new TextView(this);
tv.setText("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG");
tv.setTextSize(55f);
tv.setTextColor(this.getResources().getColor(android.R.color.black));
tv.draw(canvas);
ImageView iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(bmp);
无论是在onCreate还是OnClickListener中,这都不起作用。尝试使用setDrawingCacheEnabled(),measure()和requestLayout()也没有效果。
textView.setDrawingCacheEnabled(true)
已被弃用。现在更推荐使用像其他类型的View一样将视图绘制到画布上的方法。 - omiwrench