我正在以编程方式在Android中生成视图。父视图是RelativeLayout
,我正在动态添加子视图(例如TextView
和ImageView
)。
如果将视图添加到活动的主视图中,则它会显示正常(正好如预期)。使用此代码。
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/