是否可以从viewgroup-object获取完整的位图?
此代码从当前在屏幕上的视图组中截取“屏幕截图”,但我想要整个视图,也是当前屏幕上没有的视图。
public void export(ViewGroup view){
view.setDrawingCacheEnabled(true);
view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
Bitmap bitmap = view.getDrawingCache(true);
}
答案 0 :(得分:0)
在这里,我使用ScrollView将整个视图转换为位图 所以在这里你可以使用而不是scrollview任何其他视图组,如linerlayout等。
Bitmap map = loadBitmapFromView(getApplicationContext(),scrollView);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
map.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
//you can create a new file name "test.jpg" in sdcard folder.
File f = new File("/sdcard" +"/" + "mainemailpdf.jpg");
f.createNewFile();
//write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
bArray = bytes.toByteArray();
// remember close de FileOutput
fo.close();
并且对于loadBitmapFromView方法是:
public static Bitmap loadBitmapFromView(Context context, View v) {
Toast.makeText(context,
v.getMeasuredHeight() + "::::::::::::" + v.getMeasuredWidth(),
Toast.LENGTH_LONG).show();
if (v.getMeasuredHeight() > 0) {
v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getWidth(), v.getWidth());
v.draw(c);
return b;
}
return null;
}
我希望它有所帮助:)
任何查询都让我知道。
答案 1 :(得分:0)
由于Android系统缩小了位图,因此无法实现。 例如,如果您的位图大小为480 * 800,则其大小为480 * 800 * 4 = 1536000。 乘以4是因为每个像素是4个字节 - RGBA。
对于每个未缩放的图像,意味着超过一万半。如果Android不会缩小图像,您可能会得到 几次图像加载后的OutOfMemoryException。 如 你有3个选择:
1)view.draw(画布)你将获得图像的可见部分(只有实际被绘制到屏幕上的部分)
2)getDrawingCache() - 将为您提供缩小的图像。
3)创建自定义视图,将位图保存到磁盘并在请求时从那里加载