使用 Javascript 界面绘制 Android Surfaceview 时闪烁
Flickering when drawing Android Surfaceview with Javascript Interface
有一个网站,其中有一些小脚本可以操纵 canvas。
例如,一些数学很好的动画分形。
所有代码都在 JavaScript.
中
现在我正在制作一个应用程序来让这个脚本在 Android 上运行,
但因为它是纯 Java 脚本,我无法将代码转换为 Android-Java 来操作 SurfaceView。
我制作了一个 SurfaceView 和一个(隐藏的)WebView。 Webview 运行动画的 JavaScript 代码。在 WebView 中我还注入了一个接口(参见 JavascriptInterface),这样我就可以使用 Java 脚本来触发可以操作 SurfaceView 的函数。
有效!!!但并不完美。
我正在测试的代码将使这些条从左到右和向后平滑地移动:
function u(t){
c.width=1920 // clear the canvas
for(i=0;i<9;i++)
x.fillRect(400+i*100+S(t)*300,400,50,200) // draw 50x200 rects
}
这发生在网站上。当我将 JavaScript 代码转换为非 JavaScript Android 代码 (Java).
时会发生这种情况
它也适用于 JavaScript,但是当我这样做时,Surface 开始闪烁。 1格就看的很清楚了,这9格就惨了
我不知道怎么办,因为我不用Java脚本就可以,但是当我用Java脚本时,它会闪烁。
希望有解决办法。
提前致谢
我知道了。
我确实在绘制一个Rectangle之前锁定了canvas,绘制完后直接解锁,因为SurfaceView有一些缓冲()。
现在我只在 u(t)
函数之前锁定 canvas 并且在它之后才解锁它。
行得通。
有一个网站,其中有一些小脚本可以操纵 canvas。 例如,一些数学很好的动画分形。 所有代码都在 JavaScript.
中现在我正在制作一个应用程序来让这个脚本在 Android 上运行, 但因为它是纯 Java 脚本,我无法将代码转换为 Android-Java 来操作 SurfaceView。
我制作了一个 SurfaceView 和一个(隐藏的)WebView。 Webview 运行动画的 JavaScript 代码。在 WebView 中我还注入了一个接口(参见 JavascriptInterface),这样我就可以使用 Java 脚本来触发可以操作 SurfaceView 的函数。
有效!!!但并不完美。
我正在测试的代码将使这些条从左到右和向后平滑地移动:
function u(t){
c.width=1920 // clear the canvas
for(i=0;i<9;i++)
x.fillRect(400+i*100+S(t)*300,400,50,200) // draw 50x200 rects
}
这发生在网站上。当我将 JavaScript 代码转换为非 JavaScript Android 代码 (Java).
时会发生这种情况它也适用于 JavaScript,但是当我这样做时,Surface 开始闪烁。 1格就看的很清楚了,这9格就惨了
我不知道怎么办,因为我不用Java脚本就可以,但是当我用Java脚本时,它会闪烁。
希望有解决办法。
提前致谢
我知道了。
我确实在绘制一个Rectangle之前锁定了canvas,绘制完后直接解锁,因为SurfaceView有一些缓冲(
现在我只在 u(t)
函数之前锁定 canvas 并且在它之后才解锁它。
行得通。