以编程方式生成视图和捕获位图

时间:2014-11-23 15:00:55

标签: android view bitmap

我是以编程方式在Android中生成视图。父视图是RelativeLayout,我正在动态添加子视图(例如TextViewImageView)。

如果我将视图添加到我的活动的主视图中,那么它显示正常(正如预期的那样)。使用此代码。

LinearLayout mainView = (LinearLayout)findViewById(R.id.mainView);
mainView.addView(dynamicallyGeneratedView);

我不想将视图添加为子视图,我只想将其转换为位图。所以我做了以下几点:

view.measure(View.MeasureSpec.UNSPECIFIED,View.MeasureSpec.UNSPECIFIED);
Bitmap b = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
view.draw(c);

但是当我将这个位图添加到ImageView时,它没有显示任何内容。

我做错了什么?我想生成一个视图,将其转换为位图,但将其显示在屏幕上。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

好吧,你layout()之后肯定没有电话measure(),这里需要AFAIK。

我是否可以使用View.MeasureSpec.UNSPECIFIED以及getMeasuredWidth()这样的内容,我无法说,因为我还没有尝试过。每当我手动测量并布置View时,我总是使用实际尺寸,例如:

root=inflater.inflate(R.layout.add, null);
root.measure(800, 480);
root.layout(0, 0, 800, 480);

如果您的Bitmap目前有一个有用的尺寸,但没有任何内容,请在绘制到layout()之前尝试Canvas的尺寸。如果您的Bitmap缩小了一些不太有用的尺寸(例如,一个或两个尺寸为0),您可能需要指定实际尺寸而不是UNSPECIFIED