我正在开发一个读取电子书(epub 格式)的 Android 应用程序,目前我正在使用 Paul Siegeman 的 epublib 库,它确实是一个非常好的 epub 阅读器,但它有一些限制,例如我需要的,你无法水平移动页面(就像阅读一本真正的书一样),所以我需要自己实现它,但我被困住了。
实际读取 epub 然后将其放入 webview 中的方法是下一个:
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);
}
因此,正如您所看到的,我在网络视图中显示电子书,据我所知,网络视图提供的唯一滚动可能性是向上/向下。
我正在考虑将 getData() 返回的 html 字符串和 webview 加载到页面中并使用 viewpager 将它们一一显示,但是如何根据屏幕尺寸正确拆分 html?
你认为我的这个想法是对的吗?还有其他解决方案可以从左到右/从右到左(分页)显示 epub 或任何其他“免费或便宜”的库吗? (我尝试了PageTurner,它确实很好,但商业版对我来说太贵了)
我在android中做了这样的分页效果..
-> 创建自定义 webview 类。
-> 设置下面的客户端并加载 url,然后您将获得带有页数的水平滚动。
-> 锁定 webview 默认滚动。
->为了平滑的分页效果而不是移动webview的滚动,移动整个webview,这样一页就有一个webview。
-> 使用您自己的视图翻转器来缓冲上一页和下一页。
我已经完成了所有这些实现,并且为一个组织制作了一个产品。我只是分享我的想法如何实现最佳解决方案。不要使用第三方并由于该 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();
}
您加载网址的一个
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)