2013-09-23 11 views
12

Sto sviluppando un'applicazione Android che legge ebooks (in formato epub) e per ora sto usando la libreria epublib di Paul Siegeman che è davvero un ottimo lettore di epub ma ha alcune limitazioni, per esempio e quella di cui ho bisogno, non puoi muoverti tra le pagine orizzontalmente (come fai leggendo un vero libro) quindi ho bisogno della mia implementazione, ma sono bloccato.Come suddividere Epub Html in pagine in base alle dimensioni dello schermo

Il metodo che legge in realtà l'epub e poi lo mette in una WebView è il prossimo:

private void openEpub(String bookFilename){ 

    WebView webView = (WebView) findViewById(R.id.webView); 

    nl.siegmann.epublib.domain.Book book=null; 
    try { 
     book = (new EpubReader()).readEpub(new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/" + bookFilename)); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    String baseUrl = Environment.getExternalStorageDirectory().getPath() + "/"; 
    String data=null; 
    try { 
     data = new String(book.getContents().get(1).getData()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    webView.loadDataWithBaseURL(baseUrl, data, "text/html", "UTF-8", null); 

} 

Quindi, come vedete visualizzo l'ebook in una WebView in modo da quanto ne so la possibilità unica di scorrimento la webview dà è su/giù.

Stavo pensando di dividere la stringa html che getData() restituisce e la webview carica in pagine e visualizzandole una ad una con un viewpager, ma come dividere l'html correttamente in base alle dimensioni dello schermo?

Pensi che con questa idea io sia sulla buona strada? Qualche altra soluzione per visualizzare epub da sinistra a destra/da destra a sinistra (paginata) o qualsiasi altra libreria "gratuita o economica" per farlo? (Ho provato PageTurner, è davvero buono, ma la versione commerciale è troppo costosa per me)

risposta

2

Seguire questo account github.

FbReader fornisce alcune ottime librerie per lettori epub e pdf. Prova questo ....

o

È possibile rendere il proprio WebView personalizzata estendendo WebView. Qui puoi inserire e modificare tutte le funzionalità che desideri dalla tua WebView.

Il mio collega ha fatto un lettore usando questo FbReader ed è stato favoloso.

+0

Grazie mille Jatin, Finalmente e dopo non trovare una soluzione al mio problema in quanto si tratta di un importante progetto ho deciso di acquistare un lettore. Ora sto usando Page Turner Reader, che non è gratuito ma è solo un'applicazione fantastica. –

1

Ehi, penso che questo ti aiuterà. La risposta di Nacho L ha funzionato per me. Qui HTML book-like pagination?

+0

Grazie mille atihska, come ho detto in seguito per Jatin alla fine senza trovare una soluzione ho deciso di acquistare un lettore, e ora sto usando il lettore di Page Turner, che non è gratuito ma è solo un'app sorprendente. –

+0

@Atishka, ho testato il tuo consiglio e funziona. Non sono bravo con js, quindi potresti dirmi come cambiare pagina facendo clic o scorrendo? Un suggerimento sarebbe apprezzato. –

8

ho fatto effetto sulla paginazione in Android come questo ..

-> creare una classe WebView personalizzato.
-> imposta sotto i client e carica URL, quindi otterrai lo scorrimento orizzontale con il conteggio delle pagine.
-> Blocca lo scorrimento predefinito di Webview.
-> Per un effetto di impaginazione uniforme invece di spostare lo scorrimento della visualizzazione Web, spostare l'intera visualizzazione Web in modo che per una pagina ci sia una sola visualizzazione Web.
-> Usa i tuoi viewflippers per tamponare le pagine precedenti e successive.

Ho eseguito tutte queste implementazioni e ho realizzato un prodotto per un'organizzazione. Semplicemente sto condividendo la mia idea su come avvicinarmi alla soluzione migliore. Invece di utilizzare le terze parità e di bloccarle nel mezzo a causa della limitazione di tale sdk , rendi tutto tuo.

private class MyWebClient extends WebViewClient 
    { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 

      super.onPageStarted(view, url, favicon); 
     } 
     @Override 
     public void onPageFinished(WebView view, String url) 
     { 
      super.onPageFinished(view, url); 

      final MyWebView myWebView = (MyWebView) view; 


       String varMySheet = "var mySheet = document.styleSheets[0];"; 

       String addCSSRule = "function addCSSRule(selector, newRule) {" 
         + "ruleIndex = mySheet.cssRules.length;" 
         + "mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);" 

         + "}"; 

       String insertRule1 = "addCSSRule('html', 'padding: 0px; height: " 
         + (myWebView.getMeasuredHeight()/getContext().getResources().getDisplayMetrics().density) 
         + "px; -webkit-column-gap: 0px; -webkit-column-width: " 
         + myWebView.getMeasuredWidth() + "px;')"; 



       myWebView.loadUrl("javascript:" + varMySheet); 
       myWebView.loadUrl("javascript:" + addCSSRule); 
       myWebView.loadUrl("javascript:" + insertRule1); 




     } 
    } 

    private class MyWebChromeClient extends WebChromeClient 
    { 
     @Override 
     public void onProgressChanged(WebView view, int newProgress) 
     { 
      super.onProgressChanged(view, newProgress); 

      if(newProgress == 100) 
      { 
       postDelayed(new Runnable() 
       { 
        @Override 
        public void run() 
        { 
         calculateNoOfPages(); 
        }  

       },200); 
      } 
     } 
    } 
private void calculateNoOfPages() 
    { 
     if(GlobalSettings.EPUB_LAYOUT_TYPE == GlobalConstants.FIXED) 
     { 

     } 
     else 
     { 
      if(getMeasuredWidth() != 0) 
      { 
       int newPageCount = computeHorizontalScrollRange()/getMeasuredWidth(); 
       getData().getChapterVO().setPageCount(newPageCount); 

      } 
     } 
    } 
@Override 
    public int computeHorizontalScrollRange() { 
     // TODO Auto-generated method stub 
     return super.computeHorizontalScrollRange(); 
    } 

uno si carica URL

+0

bro ultimatum ... stavo davvero cercando una soluzione per una settimana. Ultimatum bro, hai davvero risolto un grosso problema per me. Vorrei poterti dare un 100 come. Chiunque cerchi una soluzione, quella sopra funziona perfettamente. Potrebbe essere necessario modificare la regola addCSS un po ', ma la soluzione funziona sicuramente. Grazie mille fratello –

+1

Grazie per il tuo commento arunavh !! sei il benvenuto per qualsiasi ulteriore aiuto :) –

+0

Grazie mille per il tuo tempo Uday, farò un tentativo figlio come posso ma pensi che la tua soluzione sia abbastanza facile da implementare? (L'ho letto appena in fretta mentre sono in ufficio) –

Problemi correlati