7

多くの WebView で ViewPager を使用します。これは、ePub を表示するためのものです。私の問題は、対応するページが表示されるようになると、WebViews がレンダリング/ロードされるだけです (よくわかりません)。この後、ViewPagerAdapter からページが破棄されるまで、ページを再レンダリングする必要はありません。その結果、しばらくの間、常に白いページが表示されます。次の webView にスムーズにスクロールするページを事前にレンダリングするにはどうすればよいですか (以前はレンダリングされませんでした)。

これは私の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 は WebView から拡張され、loadDataWithBaseURL を介してコンテンツをロードするメソッド loadContentDocument を実装します。

編集: activity-oncreate で setOffscreenPageLimit が 3 に設定されている

 viewPager.setOffscreenPageLimit(3);

問題が何であるかを指摘するために、YouTubeで小さなビデオを作成しました

2 番目の 4 から、すべてのページが既に表示されているときにレンダリングされていることがわかります。私が戻ったとき、すべてがうまくいっています。

4

3 に答える 3

4

同じ問題があり、Web ビューのハードウェア アクセラレーションを無効にして修正しました。

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

ViewPager または ScrollView 内の WebView を参照してください - Android 3.0 以降での奇妙なレンダリング バグ

于 2014-02-19T19:48:28.340 に答える