Android 如何根据屏幕大小将Epub Html拆分为页面
我正在开发一个Android应用程序,可以阅读电子书(epub格式),目前我正在使用Paul Siegeman的epublib库,它确实是一个非常好的epub阅读器,但它有一些限制,例如,我需要的限制是,你不能水平移动页面(就像阅读真正的书籍一样),所以我需要自己实现它,但是我被卡住了 实际读取epub然后将其放入webview的方法如下:Android 如何根据屏幕大小将Epub Html拆分为页面,android,webview,pagination,epub,Android,Webview,Pagination,Epub,我正在开发一个Android应用程序,可以阅读电子书(epub格式),目前我正在使用Paul Siegeman的epublib库,它确实是一个非常好的epub阅读器,但它有一些限制,例如,我需要的限制是,你不能水平移动页面(就像阅读真正的书籍一样),所以我需要自己实现它,但是我被卡住了 实际读取epub然后将其放入webview的方法如下: private void openEpub(String bookFilename){ WebView webView = (WebView) f
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);
}
如你所见,我在webview中显示电子书,据我所知,webview提供的唯一滚动可能性是向上/向下
我在考虑将getData()返回的html字符串和webview加载的html字符串拆分为页面,并使用viewpager逐个显示它们,但是如何根据屏幕大小正确拆分html呢
你认为我的想法对吗?是否有其他从左到右/从右到左(分页)显示epub的解决方案或其他“免费或便宜”的库?(我试过PageTurner,它真的很好,但是商业版对我来说太贵了)关注这个账户
FbReader为epub和pdf阅读器提供了一些很棒的库。试试这个
或
通过扩展WebView,您可以创建自己的自定义WebView。在这里,您可以从WebView中放置和修改所需的所有功能
我的同事用这台FbReader制作了一台阅读器,非常棒。嘿,我想这会对你有所帮助。Nacho的答案对我有用。这里?我在android上做过这样的分页效果
->创建自定义webview类。
->设置下面的客户端并加载url,然后您将获得页面计数的水平滚动。
->锁定webview默认滚动条。
->要使分页效果平滑,而不是移动webview的滚动,请移动整个webview,使一个页面有一个webview。
->使用您自己的查看器缓冲上一页和下一页。
我已经完成了所有这些实现,我为一个组织做了一个产品。我只是分享我的想法,如何接近最好的解决方案,而不是使用第三个PARIs和Stukin在中间,由于SDK的限制,使每件事都属于你自己。
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();
}
一个你加载url到非常感谢Jatin,最后,在没有找到解决我问题的方法之后,因为这是一个重要的项目,我决定买一个阅读器。现在我使用的是Page Turner Reader,它不是免费的,但它只是一个惊人的应用程序。非常感谢atihska,正如我在下面为Jatin所说的那样,在没有找到解决方案的情况下,我决定购买一个阅读器,而现在我使用的是Page Turner Reader,它不是免费的,但它只是一个惊人的应用程序。@Atishka,我测试了你的建议,它工作正常。我不擅长js,所以你能告诉我如何通过点击或滚动来更改页面吗?如果你能给我一个提示,我将不胜感激。兄弟,最后通牒……我真的在寻找一周的解决办法。最后通牒兄弟,你真的为我解决了一个该死的问题。但愿我能给你100英镑。任何寻求解决方案的人,上述方法都是完美的。您可能需要稍微更改addCSS规则,但解决方案确实有效。谢谢兄弟银行的评论!!非常感谢您抽出时间,我会尽我所能尝试一下,但您认为您的解决方案容易实现吗?(我在办公室的时候读得很快)这是真的。我刚刚开始开发,并能够拿起它。我建议你试试看,很简单。我可以尽可能多地帮助你们,我已经集成了这个,并在WebView中进行了水平滚动,现在我可以水平阅读这本书了。但你们能告诉我,我如何为每个新页面集成viewflipper?