我正在使用WebView包装一个安卓应用程序,它需要渲染一个HTML5画布。它在我所有的设备上都能完美地工作,除了一个。我的Galaxy S4 (4.2.2)在画布上闪烁,然后很快变成灰色。下面是它生成的logcat消息:
D/GestureDetector(20071):表面触摸事件mSweepDown False,mLRSDCnt:-1 mTouchCnt :7 mFalseSizeCnt:0
V/WebViewInputDispatcher输入分派器(20071):blockWebkitDraw
V/WebViewInputDispatcher(20071):blockWebkitDraw lockedfalse
D/webview(20071):blockWebkitViewMessage= false
我点击一个按钮,然后画布就会被渲染。这就是为什么第一个日志项是用于表面触摸事件的原因。当我使用webkit浏览器直接ping我的应用程序时,它可以在我的S4上工作,但当我自己包装它或使用Cordova时,它会给我这个错误。我已经添加了两个屏幕截图来进一步显示问题。第一个是正确呈现的,第二个是问题所在。
Android 2.3.6:
Android: 4.2.2:
回到我的问题上来。这条消息是怎么回事?有没有人有关于如何正确渲染画布的建议?
发布于 2014-03-15 02:45:49
我可以通过在android清单文件中将sdk的最低版本设置为14来解决这个问题:
<uses-sdk android:minSdkVersion="14" />
在版本14中,消息仍会出现在日志中,但会处理触摸事件。当我将minSdkVersion设置回来时,触摸事件不会被处理。在清单中关闭硬件加速,以及通过各种CSS webkit样式,都没有帮助。只有minSdkVersion设置为我修复了它。
不知怎么的,在Galaxy Tab上,SDK对旧版本的支持导致了javascript触摸事件处理的问题,而blockWebkitDraw在触摸移动发生时保持正确。这会阻止canvas代码接收touchmove事件并执行绘图。当我将SDK版本设置为14时,当触发触摸事件时,blockWebkitDraw将设置为true,但在处理触摸之后,它将被取消设置,并调用要绘制的画布代码。
发布于 2013-10-11 23:04:10
我粗略地浏览了一下WebView和WebViewInputDispatcher类,但什么也没找到。也许你可以看看那里。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/webkit/WebView.java http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/webkit/WebViewInputDispatcher.java
我的想法是,也许你可以找出阻塞发生的地方,或者扩展这些类,或者创建自己的副本并修改它们。
发布于 2013-11-06 08:12:52
在Galaxy Tab2上测试时,我也遇到了类似的问题。在我的例子中,我只有一个简单的超链接,而不是按钮,但问题是一样的。这是我的发现:
每当我触摸屏幕时,无论我是否点击按钮或链接,我的控制台中都会出现错误消息,标记为WebViewInputDispatcher,值为blockWebkitDraw lockedfalse。因此,此错误消息与onTouch事件有关,而不是您可能预期的按钮单击。
当最初通过点击我的一个链接进行测试时,我最初认为Galaxy Tab阻止了我的链接。事实证明,Galaxy Tab 2对点击行为非常不敏感,所以当我以为我在点击链接时,我实际上错过了。通过点击比我认为必要的稍高一点,我就能够激活我的链接了。
为了证实我的怀疑,我大大增加了我的链接的字体大小。有了更大的链接,我可以在第一次尝试时成功点击该链接,我的应用程序现在可以按预期执行。我强烈地怀疑,如果你只是把你的按钮放大一点,你就能成功地点击它。
https://stackoverflow.com/questions/18032616
复制相似问题