有没有一种方法可以在滚动时强制更新 WebView 的图像(视图)?

6
如果我在 WebView 上运行一些javascript,而在手指滑动屏幕时,视图不会随着新的外观更新,直到手指离开设备并停止滚动。
为了测试这个问题,在 WebView 中重写 onScroll ,并在那里调用一些javascript来更改页面的背景颜色。当页面滚动时,这将被不断调用。因此,当您滚动时,它应该快速闪烁不同的颜色。
但是,在带有Gingerbread的Nexus S和带有Ice Cream Sandwich的Galaxy Nexus上,只有在滚动停止时,颜色才会更新。
但是,在具有Honeycomb的Xoom上,颜色在滚动时不断更新。这是期望的结果。
有什么想法可以解决其他设备上的不同之处,并如何强制WebView在滚动时更新自身,就像Xoom一样?
谢谢!
更多信息:仅需注意,javascript在滚动过程中接收和执行,但显示这些更改的图片直到滚动结束才出现。例如,如果您调用的javascript是“console.log('rawr');”,则日志将在滚动时出现。 在源代码中发现了一些内容,有一个名为 WebView 的方法 startDrag() 调用了 WebViewCore.pauseUpdatePicture(mWebViewCore) 方法,在滚动时禁止图片更新。在 3.0 版本中,他们引入了 WebSetting setEnabledSmoothTransition(),可以在 4.0 代码中看到,允许您禁用暂停。然而,这仅适用于 3.0 及更高版本,这意味着野外设备中少于 3% 的设备可以使用。到目前为止,我没有看到任何在 3.0 版本之前的设备上解决此问题的方法..... :(
3个回答

0

我相信在 Android 2.x 版本中,为了加快滚动速度,屏幕被转换成位图并进行滚动,而不是重新绘制可能出现在屏幕上的每个视图。因此,除非您覆盖此行为,否则颜色将停止绘制,直到滚动停止。


奇怪的是,我在Xoom上有3.1版本,它完全按照我的要求工作。也许他们改变了做法,然后又改回来,再次改变了方式。有什么办法可以“覆盖”这个问题吗?谢谢! - cottonBallPaws

0
你可以使用OnTouchListener来拦截滚动条上的手指操作,重新绘制你的图形,然后将手指动作传递回滚动条,在退出OnTouchListener之前。

你如何重新绘制图形?我希望Webview重新绘制其内容,即Web内容。 - cottonBallPaws

0
你可以尝试为你的WebView实现一个OnTouchListener,在onTouchEvent中调用yourWebView.invalidate()。这将强制View重新绘制自己。

我抱着一些希望尝试了这个方法,但是很遗憾invalidate()似乎不能强制WebView重新绘制它的图像,它仍然要等到滚动结束才会更新。 - cottonBallPaws

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接