在Android应用程序中,我试图通过此代码将图形(我使用achartengine绘制)导出为Bitmap对象
public static Bitmap loadBitmapFromView(Context context, View view) {
Bitmap bitmap;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
options.inInputShareable = true;
Bitmap dummy = null;
try {
dummy = BitmapFactory.decodeStream(context.getAssets().open("icon_add.png"), new Rect(-1,-1,-1,-1), options);
} catch (IOException e) {
e.printStackTrace();
}
bitmap = Bitmap.createBitmap(view.getLayoutParams().width,
view.getLayoutParams().height, Bitmap.Config.ARGB_4444);
Canvas c = new Canvas(bitmap);
view.layout(0, 0, view.getLayoutParams().width, view.getLayoutParams().height);
view.draw(c);
c = null;
return bitmap;
}
我将此方法称为:
loadBitmapFromView(getApplicationContext(), this.graphView);
其中graphView是GraphicalView类型的对象
但这是抛出异常
java.lang.IllegalArgumentException: width and height must be > 0
在这一行
bitmap = Bitmap.createBitmap(view.getLayoutParams().width,
view.getLayoutParams().height, Bitmap.Config.ARGB_4444);
有人可以帮忙吗?
答案 0 :(得分:2)
每个http://developer.android.com/reference/android/view/View.html#getLayoutParams()该方法返回
...布局参数。这些供应参数提供给此视图的父级 具体说明如何安排。
即。这些是布局计算的输入:
LayoutParams ...描述视图对宽度和高度的要求。对于每一个 维度,它可以指定一个确切的数字,MATCH_PARENT,WRAP_CONTENT
您需要实际的视图大小,即布局计算的结果。
如果此视图已在屏幕上显示,则view.getWidth()
和view.getHeight()
应返回其实际大小。在这种情况下,调用view.layout(...)
可能会使显示的视图处于您应该恢复的奇怪状态,并且您希望再次传递实际大小信息,而不是布局参数。
如果屏幕上没有此视图,则应在view.measure(widthMeasureSpec, heightMeasureSpec)
之前调用view.layout(...)
。请阅读View文档。