我正在以编程方式在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时,它什么也没有显示。

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

任何帮助,将不胜感激。

最佳答案

好吧,您肯定没有在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

关于android - 以编程方式生成 View 并捕获位图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27090308/

10-11 22:22
查看更多