WebViews en ViewPager no se cargan / representan hasta que se muestra la página

Yo uso un ViewPager con muchas WebViews, es para mostrar un ePub. Mi problema es que los WebViews son sólo renderizado / cargado (no estoy muy seguro) cuando su página correspondiente se vuelve visible. Después de esto, la página no necesita ser vuelto a renderizar hasta que se destruye desde ViewPagerAdapter. La consecuencia es que siempre hay una página en blanco por un tiempo. ¿Cómo puedo pre-procesar la página que se desplaza suave a próxima webView (que no se prestó antes).

Este es mi PagerAdapter:

public class MagazineReaderPagerAdapter extends PagerAdapter { private MagazineReaderActivity activity; private EpubDocument epub; public MagazineReaderPagerAdapter(Context ctx, EpubDocument epub) { activity = (MagazineReaderActivity) ctx; this.epub = epub; } @Override public int getCount() { return epub.getContentDocuments().size(); } @Override public Object instantiateItem(ViewGroup container, int position) { ReaderWebViewMulti view = new ReaderWebViewMulti(activity); view.loadContentDocument(epub.getContentDocuments().get(position), epub); ((ViewPager) container).addView(view, 0); return view; } @Override public boolean isViewFromObject(View view, Object object) { return view.equals(object); } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((View) object); } } 

ReaderWebViewMulti se extiende desde WebView ind implementa un método loadContentDocument que carga el contenido a través de loadDataWithBaseURL.

Edit: En activity-oncreate el setOffscreenPageLimit se establece en 3

  viewPager.setOffscreenPageLimit(3); 

Para señalar cuál es el problema, hice un pequeño video en YouTube

Desde el segundo 4 se puede ver que cada página se representa sólo cuando ya está visible. Cuando vuelva todo está bien.

3 Solutions collect form web for “WebViews en ViewPager no se cargan / representan hasta que se muestra la página”

Tuve el mismo problema y lo arreglé desactivando la aceleración de hardware para la vista web:

 webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Ver WebView dentro de ViewPager o ScrollView – extraño error de renderizado en Android 3.0+

Puse algunos pensamientos en esto. Desplazamiento de la pantalla de 1 píxel sería la página derecha:

  class SomeClass implements OnPageChangeListener { private ViewPager viewPager; ... viewPager = ... viewPager.setOnPageChangeListener(this); ... @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) { // viewpager finished scrolling to a page viewPager.scrollBy(1, 0); } } } 

Tendrías que comprobar si vienes de derecha o izquierda y de acuerdo con este desplazamiento de -1 o 1 píxeles (la página de donde vienes se quedará en la memoria, por lo que no es necesario volver a cargarla). Sólo en el primer desplazamiento (después de abrir la aplicación) el problema descrito anteriormente aún persistirá.

Desventaja: puede ver la página desplazándose 1 píxel, si se ve muy de cerca.

Alguien con más tiempo que yo podría bucear en el código de Android para ver qué sucede exactamente cuando 1 píxel entra en la pantalla, e imitar algunos de este comportamiento.

Establezca esta propiedad para su aplicación en el archivo de manifiesto

Android: hardwareAccelerated = "false"

  • ¿Puedo usar CloudKit en Android o en una aplicación basada en Web?
  • Android: Obtener la posición de desplazamiento de un WebView
  • Obtener el precio de un sitio web minorista
  • Viewpager + webview, cómo detener la carga de la webview
  • ¿Es posible cambiar el navegador / motor predeterminado para la vista Web de Android?
  • Cómo seleccionar una palabra en la vista web de Android?
  • ¿Cómo puedo determinar si una aplicación de Android se ha creado con una vista web?
  • Vista web de Android: lee las cookies
  • Giro a la izquierda / derecha de Android en la actividad de WebView (haciendo clic en vínculos y desplazamiento vertical)
  • Utilizar ChromeView en la aplicación para Android
  • Notificación de empuje en Web móvil
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.