截取整个视图的屏幕截图

sof*_*ply 39 android screenshot

我已经建立了一个基本上由HorizontalScrollView内部完成的表ScrollView.我让用户可以编辑字段.

现在我想将表保存在屏幕上,jpg,png,pdf或其他任何内容.

问题是 - 表几乎总是比屏幕大.

有没有办法制作整个ScrollView布局的屏幕截图?如果不是你认为可以做什么工作?

sof*_*ply 63

其实我找到了答案:

public static Bitmap loadBitmapFromView(View v, int width, int height) {
    Bitmap b = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return b;
}
Run Code Online (Sandbox Code Playgroud)

  • Leon,你总是调用view.getWidth()和view.getHeight来获取航班上的视图尺寸 (6认同)
  • 这里的问题是平均布局没有实际的高度/宽度值,并且通常设置为match_parent/fill_parent.在我的情况下,我需要调查真实大小可访问的父级. (4认同)
  • 非常好看,可惜背景是黑色的。如何设置背景颜色? (2认同)

hac*_*tsu 17

  ScrollView iv = (ScrollView) findViewById(R.id.scrollView);
  Bitmap bitmap = Bitmap.createBitmap(
        iv.getChildAt(0).getWidth(), 
        iv.getChildAt(0).getHeight(), 
        Bitmap.Config.ARGB_8888);
  Canvas c = new Canvas(bitmap);
  iv.getChildAt(0).draw(c);

  // Do whatever you want with your bitmap
  saveBitmap(bitmap);
Run Code Online (Sandbox Code Playgroud)


sah*_*ahu 9

在我的情况下使用@softwaresupply回答导致问题,我的视图重新绘制并变为完全白色.有一个更简单的解决方案来获取屏幕截图,您甚至不必提供宽度和高度作为参数.使用绘图缓存.

public static Bitmap loadBitmapFromView(View v) {
    Bitmap bitmap;
    v.setDrawingCacheEnabled(true);
    bitmap = Bitmap.createBitmap(v.getDrawingCache());
    v.setDrawingCacheEnabled(false);
    return bitmap;
}
Run Code Online (Sandbox Code Playgroud)


tom*_*ash 7

无法制作尚未呈现内容的屏幕截图(如ScrollView的屏幕外部分).但是,您可以制作多个屏幕截图,在每个镜头之间滚动内容,然后加入图像.这是一个可以为您自动执行此操作的工具:https://github.com/PGSSoft/scrollscreenshot

插图

免责声明:我是这个工具的作者,它是由我的雇主发布的.欢迎提出功能要求.