如果您使用滚动条进行了很长时间的活动,如何获得完整的屏幕截图

时间:2017-01-03 07:31:04

标签: android

如果您的活动内容太多并且显示非常长的ui,例如包含ListView或WebView,

如何在长图像中获取包含整个内容的屏幕截图?

3 个答案:

答案 0 :(得分:1)

我认为此链接中的答案可以帮助您:

How to convert all content in a scrollview to a bitmap?

我在上面的链接中混合了两个答案,为您制作一段优化的代码:

private void takeScreenShot() 
{
View u = ((Activity) mContext).findViewById(R.id.scroll);

HorizontalScrollView z = (HorizontalScrollView) ((Activity) mContext).findViewById(R.id.scroll);
int totalHeight = z.getChildAt(0).getHeight();
int totalWidth = z.getChildAt(0).getWidth();

Bitmap b = getBitmapFromView(u,totalHeight,totalWidth);             

//Save bitmap
String extr = Environment.getExternalStorageDirectory()+"/Folder/";
String fileName = "report.jpg";
File myPath = new File(extr, fileName);
FileOutputStream fos = null;
try {
    fos = new FileOutputStream(myPath);
    b.compress(Bitmap.CompressFormat.JPEG, 100, fos);
    fos.flush();
    fos.close();
    MediaStore.Images.Media.insertImage(mContext.getContentResolver(), b, "Screen", "screen");
}catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}

public static Bitmap getBitmapFromView(View view, int totalHeight, int totalWidth) {

int height = Math.min(MAX_HEIGHT, totalHeight);
float percent = height / (float)totalHeight;

Bitmap canvasBitmap = Bitmap.createBitmap((int)(totalWidth*percent),(int)(totalHeight*percent), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(canvasBitmap);

Drawable bgDrawable = view.getBackground();
if (bgDrawable != null)
   bgDrawable.draw(canvas);
else
   canvas.drawColor(Color.WHITE);

canvas.save();
canvas.scale(percent, percent);
view.draw(canvas);
canvas.restore();

return canvasBitmap;
}

答案 1 :(得分:1)

尝试使用这个, 将您的视图传递给此功能,

public Bitmap getBitmapFromView(View view) {
        // Define a bitmap with the same size as the view
        Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.RGB_565);
        // Bind a canvas to it
        Canvas canvas = new Canvas(returnedBitmap);
        // Get the view's background
        Drawable bgDrawable = view.getBackground();
        if (bgDrawable != null)
            // has background drawable, then draw it on the canvas
            bgDrawable.draw(canvas);
        else
            // does not have background drawable, then draw white background on
            // the canvas
            canvas.drawColor(Color.WHITE);
        // draw the view on the canvas
        view.draw(canvas);
        // return the bitmap
        return returnedBitmap;
    }

此函数将返回位图,您可以按照自己的方式使用它。

答案 2 :(得分:0)

您可以轻松地将布局转换为“位图图像”

protected Bitmap ConvertToBitmap(LinearLayout layout) {

    layout.setDrawingCacheEnabled(true);

    layout.buildDrawingCache();

    Bitmap bitmap = layout.getDrawingCache();

    return bitmap;

}