如何在 Android 中将 webview 捕获为位图?

2023-11-23

我有一个网络视图,我需要向下滚动才能查看所有内容。现在,我想要捕获整个网络视图到位图。

我找了很多次。人们建议我使用该功能capturePicture()。然而,这个函数是已弃用。那么,我还可以使用哪些其他方法来实现我的目标?

谢谢大家。


Android L,您需要在创建任何 WebView 之前调用 WebView.enableSlowWholeDocumentDraw()。也就是说,如果布局中有任何 WebView,请确保在 onCreate() 中调用 setContentView() 之前调用此方法。
linked 米哈伊尔·纳加诺夫:https://stackoverflow.com/a/30084485/703225

@Override
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        WebView.enableSlowWholeDocumentDraw();
    }
    ...
    setContentView(layout);
    ...
    ...
}

then:

/**
 * WevView screenshot
 * 
 * @param webView
 * @return
 */
public static Bitmap screenshot(WebView webView, float scale11) {
    try {
        float scale = webView.getScale();
        int height = (int) (webView.getContentHeight() * scale + 0.5);
        Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        webView.draw(canvas);
        return bitmap;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

如果您不使用 webView.getScale(),还可以:

public static Bitmap screenshot2(WebView webView) {
    webView.measure(MeasureSpec.makeMeasureSpec(
                    MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    webView.layout(0, 0, webView.getMeasuredWidth(), webView.getMeasuredHeight());
    webView.setDrawingCacheEnabled(true);
    webView.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(webView.getMeasuredWidth(),
            webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint();
    int iHeight = bitmap.getHeight();
    canvas.drawBitmap(bitmap, 0, iHeight, paint);
    webView.draw(canvas);
    return bitmap;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 中将 webview 捕获为位图? 的相关文章

随机推荐

  • 我们如何存储到 NSDictionary 中? NSDictionary 和 NSMutableDictionary 有什么区别?

    我正在开发一个应用程序 我想在其中使用NSDictionary 任何人都可以给我发送一个示例代码来解释如何使用NSDictionary用一个完美的例子来存储数据 The NS词典 and NSMutableDictionary文档可能是您最
  • 您可以以多快的速度自动增加 Firebase 实时数据库上的值?

    火力战士在这里 当我最近tweeted关于新的increment Firebase实时数据库中的操作员 有队友问有多快increment is 我一直想知道同样的问题 你能以多快的速度增加一个值increment 1 与此相比如何使用事务来
  • C++11:按值传递是否涉及移动语义?

    我有一个如下所示的 API void WriteDefaultFileOutput std wostream str std wstring target Some code that modifies target before prin
  • 撰写布局:相对于居中项目对齐(例如 toRightOf)

    Compose 中有没有一种方法可以在不使用的情况下将可组合项与居中项目对齐ConstraintLayout I want to achieve this I could use a Spacer and Weights like this
  • 这些自执行匿名函数(又名 IIFE)实现有什么区别

    在很多书中 博客文章自调用匿名函数模式是这样写的 function var foo bar 然而运行JSLint对此给出了这个错误 将调用移至包含该函数的括号中 例如将其更改为这样的作品 function var foo bar 问题 为什
  • 如何使用 vbscript 获取正在运行的 Excel 实例的工作簿名称?

    Dim objXL strMessage On Error Resume Next Set objXl GetObject Excel Application If Not TypeName objXL Empty then strMess
  • Ember 表与 Ember 模型/Ember 数据集成

    我试图将 ember models 链接到 ember table 以从服务器提取分页记录 并在向下滚动时将它们添加到表中 我可以通过只请求我的 api url 和页码来让它工作 就像 ajax 示例中那样http addepar gith
  • 方法与函数,以及其他问题

    对于JS来说 两者有什么区别呢 我知道方法与对象相关联 但我很困惑函数的目的是什么 它们各自的语法有何不同 另外 这两种语法有什么区别 var myFirstFunc function param Do something and func
  • CsvHelper ConvertUsing 不更改输出

    我正在尝试使用ConvertUsing的方法CSV助手库 v 2 4 0 我已阅读有关的文档转换使用但无法让它发挥作用 我正在使用一个简单的类 public class Test public long Id get set public
  • Python Pandas

    我正在尝试对连续的相同信息进行分组和计数 Functions def postal saude global df lista solic List of solicitantes in Postal Saude list sol list
  • 如何从Firebase配置中获取measurementId?

    和玩谷歌分析对于 Firebase 上基于 Web 的项目 我们需要使用 Firebase 保留 URL 或按照文档所述复制 更新 Firebase 配置对象here 我正在使用以下命令来打印该配置信息 firebase setup web
  • VS Code 根据文件中的单词自动完成

    我刚刚开始使用 VS Code 目前我对此非常满意 我来自 Notepad 对于我正在做的事情 我没有找到任何处于同一 级别 的 IDE 直到现在 我真的很喜欢 VS Code 所做的事情以及所有现代集成技术如何帮助我 但我怀念 NPP 所
  • 如何增加 Symfony 2 表单上文件的上传限制?

    我在 Symfony 中有一个表单 用户可以将文件上传到其中 这些文件的大小最大可达 50Mb 但是 当我尝试上传大约 10Mb 的文件 在此之前 文件不大于 7 2Mb 时 表单会重新加载并出现以下错误 上传的文件太大 请尝试上传较小的文
  • ImageButton 不显示特定的可绘制对象

    这是我遇到过的一个相当有趣的问题 我的表格布局有 9 个图像按钮 每行 3 个 每个 ImageButton 都有一个与之关联的不同图像 我已将图像按钮的背景设置为透明 00000000 现在有趣的事情发生了 其中一张图像没有显示在模拟器
  • 如何处理 Win32 错误消息的占位符?

    我想在我的程序遇到 Win32 错误时显示有意义的错误消息 我打电话GetLastError 进而FormatMessage 但某些错误消息包含占位符 例如 ERROR BAD EXE FORMAT有文字 1 不是有效的 Win32 应用程
  • 如何在Python中使用cv2和多重处理并行从视频中获取帧

    我一直在 python 中使用 cv2 和多处理 我终于有了一个工作脚本 一旦各个帧已经在输入队列中 它就会对它们进行处理 但是 我想首先通过使用多个核心来加快将帧放入队列的速度 因此我尝试使用相同的多处理方法将每个图像读入队列 但我似乎无
  • python 3.5 上的 PyHook

    我正在尝试在 python 上编写一个基本的键盘记录程序 我需要安装 pywin32 和 pyhook 模块 我已经成功安装了 pywin32 但似乎无法 pyhook 工作 我已经读到它可以在更高版本的 python 上工作 但似乎无法弄
  • Spring 3 MVC:动态表单中的一对多(在创建/更新时添加/删除)

    我正在寻找解决方案管理 HTML 表单中的一对多关系 using jQuery 我正在开发Spring 春季MVC and 休眠 我在网上找到了很多曲目 但没有任何有效的完整示例 的背景 我有三个 JPA 实体 Consult java 1
  • Erlang:分布式应用程序奇怪的行为

    我使用分布式 erlang 应用程序进行支付 配置和思路取自 http www erlang org doc pdf otp system documentation pdf9 9 分布式应用程序 我们有3个节点 n1 a2 X201 n2
  • 如何在 Android 中将 webview 捕获为位图?

    我有一个网络视图 我需要向下滚动才能查看所有内容 现在 我想要捕获整个网络视图到位图 我找了很多次 人们建议我使用该功能capturePicture 然而 这个函数是已弃用 那么 我还可以使用哪些其他方法来实现我的目标 谢谢大家 Andro