2012-02-08 10 views
6

Si ejecuto javascript en un WebView mientras se está desplazando el WebView (con un dedo en la pantalla), la vista no se actualiza con la nueva apariencia hasta que el dedo se levanta del dispositivo y el desplazamiento se detiene.¿Hay alguna manera de obligar a WebView a actualizar su imagen (vista) mientras se desplaza?

Para probar esto, estoy anulando onScroll en el WebView y allí estoy llamando un poco de javascript que cambia el fondo de la página a un color aleatorio. Esto se invoca una y otra vez mientras la página se desplaza. Por lo tanto, debería mostrar rápidamente diferentes colores a medida que se desplaza.

Sin embargo, en un Nexus S con Gingerbread y un Galaxy Nexus con Ice Cream Sandwich, el color solo se actualiza cuando se detiene el desplazamiento.

Pero en un Xoom con Honeycomb, el color se actualiza constantemente a medida que se desplaza. Este es el resultado deseado.

¿Alguna idea de qué es diferente en los otros dispositivos y cómo forzar a WebView a actualizarse mientras se desplaza por la forma en que lo hizo Xoom?

Gracias!

Más información: Solo para tener en cuenta, el javascript se recibe y promulga durante el desplazamiento, pero la imagen que muestra estos cambios no aparece hasta que el desplazamiento finaliza. Por ejemplo, si el javascript que llamas es "console.log ('rawr');" los registros mientras aparecen mientras se desplaza.

encontrado algo en el código fuente Hay un método llamado WebViewstartDrag() que llama WebViewCore.pauseUpdatePicture(mWebViewCore) que deshabilita la imagen se actualice mientras se desplaza. En 3.0 introdujeron la WebSetting setEnabledSmoothTransition() que puede ver en el código 4.0, le permite desactivar la pausa. Sin embargo, esto solo está disponible 3.0 y más, lo que significa menos del 3% de en los dispositivos wild. Hasta ahora no veo ninguna forma de evitar esto en dispositivos anteriores a 3.0 ..... :(

Respuesta

0

Creo que cuando las versiones de Android 2.x se desplazaron, para hacerlo más rápido la pantalla se convirtió en un mapa de bits y eso se desplaza, en lugar de volver a dibujar cada vista que potencialmente puede estar en la pantalla, así que a menos que anule esto, los colores van a dejar de dibujarse hasta que el desplazamiento se detenga

+0

Lo extraño es que tengo 3.1 en un Xoom y funciona exactamente como yo quiero. Entonces tal vez cambiaron la forma en que lo hicieron, luego lo cambiaron de regreso, y luego lo cambiaron de vuelta al revés. ¿Alguna idea sobre cómo "superar esto"? ¡Gracias! – cottonBallPaws

0

Puede usar un OnTouchListener para interceptar el acción de los dedos en la barra de desplazamiento, vuelva a dibujar los gráficos y luego pase el movimiento de los dedos a la barra de desplazamiento antes de salir de onTouchListener.

+0

¿Cómo volverías a dibujar los gráficos? Quiero que Webview vuelva a dibujar su contenido, el contenido web. – cottonBallPaws

0

Lo que podría intentar es implementar un OnTouchListener para su Web Ver int la llamada onTouchEvent llame a suWebView. invalidate(); Esto fuerza a la Vista a redibujarse.

+0

Intenté esto con algo de esperanza, pero alas invalidar() no parece obligar a WebView a volver a dibujar su imagen, aún espera hasta que finalice el desplazamiento. – cottonBallPaws

Cuestiones relacionadas