Android WebView 与layer_type_software 不显示HTML5 画布内容

2023-12-02

自上次更新 Android WebView 以来,通过将 WebView 的图层类型设置为 View.LAYER_TYPE_SOFTWARE 来禁用硬件加速时,带有 HTML5 画布的网页无法正确显示。这个问题有解决方法吗?

当我省略以下 Java 代码行时: webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 然后内容就可以正确显示了。

Java代码:

WebView webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
webView.loadUrl("file:///android_asset/Gradient.html");

html文件test.html:

<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
// Create gradient
var grd = ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
// Fill with gradient
ctx.fillStyle = grd;
ctx.fillRect(10,10,150,80);
</script>
</body>
</html>

预期结果: 黑色边框中的红色线性渐变https://heiri-web.ch/Gradient.png

实际结果: 空黑色边框https://heiri-web.ch/Empty.png


提交错误报告后https://issuetracker.google.com/issues/139276381我收到了 Google 的答复,该错误不会被修复LAYER_TYPE_SOFTWARE已经过时了。因为我需要LAYER_TYPE_SOFTWARE 使用以下命令获取完整的屏幕截图(包括 HTML5 画布内容)WebView.getDrawingCache()我要求另一种方法。

根据WebView开发团队成员Bo Liu的建议,我成功地在不使用WebView的情况下获得了WebView的完整屏幕截图LAYER_TYPE_SOFTWARE: 创建一个 ImageReader,使用ImageReader.getSurface()要获取 Surface,请在 Surface 上创建 VirtualDisplay,使用VirtualDisplay.getDisplay()要获取显示器,请在显示器上的布局中创建一个带有 WebView 的演示文稿,使用Presentation.show(), use ImageReader.acquireLatestImage()读取 WebView 内容的渲染图像。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android WebView 与layer_type_software 不显示HTML5 画布内容 的相关文章

随机推荐

  • Visual Studio 2015 初始化部分 Nuget.PackageManagement.VisualStudio.VSolutionManager 必须在 UI 线程上调用

    在尝试在最近更新的 Visual Studio 2015 14 0 25431 01 Update 3 中构建或打开项目时 我不断收到有关 nuget 包管理的错误 每当我打开 VS 后第一次构建项目时 都会收到以下错误消息 当我尝试打开
  • 在考虑多个条件的方法中返回 null

    考虑以下方法 private static String method String string if string equals conditionOne return value else if string equals condi
  • 如何在 C++ 中可移植地计算 sha1 哈希值?

    目标是计算SHA1作为 C 程序一部分的一个或多个缓冲区的哈希值 我不确定使用 boost 的 UUID 是否会正确地在哈希值中添加前导零 据我所知 您的字符串应该始终具有相同的长度 因此这里是上面示例的简化版本 可以做到这一点 inclu
  • css3 动画停止

    目前我正在制作带有滑块动画的标题 仅限 css3 http jimmytenbrink nl slider 一切工作正常 除了有时从中心向右移动时滑块会出现故障 看来我需要停止动画几毫秒才能完成 然而 我在互联网上到处搜索 但似乎无法让它工
  • 无法访问 Metro 应用中的资产文件

    我正在尝试读取一个文本文件 该文件作为 Metro 应用程序中的资产提供 如果将文件路径指定为 ms appx Assets file txt 我会收到访问被拒绝错误 显然我需要设置一些访问安装位置文件夹的功能 我尝试启用清单设计器中的所有
  • Visual Studio 安装和部署构建失败,没有错误

    我有一个设置和部署项目 在我们的构建服务器上 在摘要中报告以下内容 全部重建 25 成功 2 失败 0 跳过 我不知道失败的两个是什么 但我相信其中之一是 vdproj 项目 因为如果我在没有安装程序的情况下运行构建 则根本不会报告任何错误
  • 如何用PHP下载大文件?

    我花了一周的时间来找到这个问题的正确答案 Right 我的意思是绝对符合现有的网络标准 可靠且性能有效 最后 我找到了解决方案 我在 StackOverflow 上找到的所有内容 在 PHP 中可靠地下载大文件 如何通过PHP脚本下载大文件
  • 使用 Quartz.NET 3.0.3 和简单注入器进行构造函数注入操作方法

    我正在尝试在 Windows 服务中使用 Quartz Net v3 0 3 和简单注入器 我有一个作业类 我想在其下面注入一些依赖项 例如我的记录器 public class JobWorker IJob private ILogger
  • 向按钮添加彩色阴影

    我需要向具有 来自 zeplin 这些属性的按钮添加阴影 这就是设计 我试过这段代码
  • React 中生成器的调用次数超出预期

    我发现生成器似乎被调用两次的行为 下面是一个简单的代码 它从生成器获取一个数字并将其输出到控制台 它期望控制台输出 0 和 1 但实际上输出的是 0 和 2 import useState useEffect from react func
  • <%= 导轨 4 中有一个块

    我正在尝试在助手中使用块 但这给了我这个错误 SyntaxError syntax error unexpected rbout concat green title do to s erbout concat n erb 4254 syn
  • 大多数静态数据流的 CRC 计算

    背景 我有一段内存 1024字节 最后 1020 字节始终相同 前 4 个字节将发生变化 产品的序列号 我需要计算CRC 16 CCITT 0xFFFF 起始 0x1021 掩码 对于整个内存部分 CRC WHOLE 问题 是否可以仅计算前
  • 如何在 XAML 中绑定到静态属性?

    我试图将不同类的静态属性绑定到 TextBlock 的 Text 属性 并且可以使绑定正常工作 但是当静态属性的值发生更改时 Text 属性不会更新 我读过 我无法使用 INotifyPropertyChanged 因为该属性是静态的 并且
  • 导航推送新的根控制器

    我正在尝试将新的根控制器推送到导航堆栈 但使用侧面显示菜单 我的应用程序委托具有以下内容 welcomeViewController MyWelcomeViewController alloc initWithNibName MyWelco
  • ORACLE 中的利斯塔格

    我正在尝试使用 LISTAGG 来获取两列以上 SELECT deptname deptno LISTAGG ename WITHIN GROUP ORDER BY ename AS employees FROM emp GROUP BY
  • 在 $0 和 BASH_SOURCE 之间选择

    一个人如何选择 0 and BASH SOURCE 0 这段描述来自GNU对我帮助不大 BASH SOURCE An array variable whose members are the source filenames where t
  • 在 OCaml 中组合一列列表

    我想在 OCaml 中转置一个矩阵 不使用递归或任何类型的循环 例如 如果我有以下矩阵 1 2 3 4 我想要的输出 1 3 2 4 到目前为止我所做的是将原始矩阵分解为单独的列 function that separates into c
  • HTML5 是否使 Javascript 游戏更安全(更安全)?

    我知道 JavaScript 是一种极其不安全的持久游戏编程方式 例如 您在 RPG 中进行战斗计算 然后在获胜时通过链接到 PHP 页面来奖励 XP 该页面会将 XP 添加到数据库中 因为玩家可以制作自己的 javascript 来始终获
  • WPF 树数据模板取决于项目类型

    我有一个 MVVM WPF 应用程序 其中有一棵包含自引用数据的树 该数据通过分层转换器绑定到该树 如示例 http www telerik com help wpf radtreeview how to bind to self refe
  • Android WebView 与layer_type_software 不显示HTML5 画布内容

    自上次更新 Android WebView 以来 通过将 WebView 的图层类型设置为 View LAYER TYPE SOFTWARE 来禁用硬件加速时 带有 HTML5 画布的网页无法正确显示 这个问题有解决方法吗 当我省略以下 J