1

Androidでepublibを使用して、epubファイルをwebviewにロードしています。これは、ファイルをロードするための私のコードです

public void getEntireBook(){  
    Spine spine = book.getSpine(); 
    List<SpineReference> spineList = spine.getSpineReferences() ;
    int count = spineList.size();
    TextView tv=new TextView(getApplicationContext());
    tv.setText(Integer.toString(count));
    StringBuilder string = new StringBuilder();

    for (int i = 0; count > i; i++) {
        Resource res = spine.getResource(i);
        string.append(res.getTitle());

        RowData row = new RowData();
        row.setTitle(string.toString());
        row.setResource(spine.getResource(i));
        contentDetails.add(row);

        try {
            InputStream is = res.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            try {
                while ((line =(String) reader.readLine()) != null) {


                }

            } catch (IOException e) {e.printStackTrace();}

            //do something with stream
        } catch (IOException e) {
            e.printStackTrace();
        }

        webView.loadData(line, "text/html;charset=UTF-8",null);
    }
} 

一部のファイルは正常にロードされます 20 mb から 70 mb のファイルは正常にロードされますが、90 mb を超えるファイルは問題を引き起こし、空白の Web ビューが表示されるか、画面が黒くなります。

一部のファイルのもう 1 つの問題は、ファイルによってはテキストが大きく、画像や装飾フォントなどの豊富なグラフィック コンテンツが含まれていることです。それらをwebviewにロードすると小さな点が表示され、ズームインするとテキストが散らばります。

だから私は2つの質問があります

  1. webview で 150 mb ファイルのような大きなファイルをレンダリングする方法
  2. エンリッチ グラフィック コンテンツを読み込む方法。

setrenderpriority high などのすべての webview 設定を使用し、js を webview に挿入しましたが、解決策を見つけることができませんでした。

4

1 に答える 1

1

章ごとにレンダリングする必要があります (ページネーション)。一度にすべてのチャプターをレンダリングしないでください。Android で遅延が発生する可能性があります。

   public void pagination (int page){ 
        Resource res = spine.getResource(page);
        string.append(res.getTitle());

        RowData row = new RowData();
        row.setTitle(string.toString());
        row.setResource(res);
        contentDetails.add(row);

        try {
            InputStream is = res.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            try {
                while ((line =(String) reader.readLine()) != null) {


                }

            } catch (IOException e) {e.printStackTrace();}

            //do something with stream
        } catch (IOException e) {
            e.printStackTrace();
        }
        webView.loadData(line, "text/html;charset=UTF-8",null);                       
   }

于 2016-07-21T09:04:13.707 に答える