在上面的api 21中截取Webview的截图

时间:2017-09-25 12:23:23

标签: android webview screenshot

我正在尝试上面的Api 21中的webview截图,它只捕获屏幕上可见的webview内容,其他部分也被捕获但没有任何内容。意味着它显示白色空间。

我使用下面的代码截取屏幕截图。

public static String getScreenShotOf(View view, Context context) {
    try {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);

        return storeImage(context, bitmap);
    }
    catch (Exception e) {
        UtillsG.showToast("Error while taking screenshot.", context, false);
    }

    return null;
}

这些东西在LOLLIPOP或以下版本中完美运行。 查看kitkat和marshmallow设备的屏幕截图。

有人可以帮帮我吗?

任何支持将不胜感激。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:4)

您可以将root布局用作webview,并尝试使用以下代码。

public Bitmap takeScreenshot() {

View rootView = getWindow().getDecorView().findViewById(R.id.PP_Ll);
rootView.setDrawingCacheEnabled(true);
return rootView.getDrawingCache();

}

public void saveBitmap(Bitmap bitmap){

String root = Environment.getExternalStorageDirectory().toString();
File newDir = new File(root + "/Folder");
newDir.mkdirs();
Random gen = new Random();
int n = 10000;
n = gen.nextInt(n);
String fotoname = "Photo-" + n + ".jpg";
File file = new File(newDir, fotoname);
if (file.exists())
    file.delete();
try {
    FileOutputStream fos = new FileOutputStream(file);
    bitmap.compress(CompressFormat.JPEG, 100, fos);
    fos.flush();
    fos.close();
    Toast.makeText(getApplicationContext(),
            "Saved in folder: 'Folder'", Toast.LENGTH_SHORT).show();

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

} }