Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WebViews in ViewPager are not loaded/rendered until page is shown

I use a ViewPager with many WebViews, it is for showing an ePub. My Problem is that the WebViews are just rendered/loaded (im not quite sure) wenn their corresponding page becomes visible. After this the page doesn't need to be re-rendered until it is destroyed from the ViewPagerAdapter. The consequence is that there is always a white page for a little while. How can i pre-render the page that it scrolls smooth to next webView (which was not rendered before).

This is my 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 extends from WebView ind implements a method loadContentDocument wich loads the content via loadDataWithBaseURL.

edit: At activity-oncreate the setOffscreenPageLimit is set to 3

 viewPager.setOffscreenPageLimit(3);

To point out what the problem is, i made a little video on YouTube

From second 4 you can see that every page is just rendered when it is already visible. When i go back everything is fine.

like image 870
Mate Avatar asked Sep 04 '12 15:09

Mate


1 Answers

I had the same problem and fixed it by disabling hardware acceleration for the web view:

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

See WebView inside ViewPager or ScrollView - weird rendering bug on Android 3.0+

like image 170
Willum Avatar answered Oct 20 '22 00:10

Willum